首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bindParam PDO PHP

bindParam PDO PHP
EN

Stack Overflow用户
提问于 2012-11-13 17:46:32
回答 3查看 1.5K关注 0票数 0

我在绑定参数或值时遇到了问题,有人知道哪里出了问题吗?如果我改变了呢?要使其有效,请执行以下操作:

代码语言:javascript
复制
$item = 'area';
$query = dbConnectionPDO::getConnect()->prepare( ' SELECT * FROM  ? ' );
$query->bindParam(1, $item, PDO::PARAM_STR);
$query->execute();

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){
    ////
}

这是一个好的解决方案吗?它起作用了!

代码语言:javascript
复制
$select = 'select * from ' . $item . ' left join ' . $TableName . ' ';

$query = dbConnectionPDO::getConnect()->prepare("$select ON :three = :four");
$query->bindValue(':three', $three, PDO::PARAM_STR);
$query->bindValue(':four', $four, PDO::PARAM_STR);
$query->execute();

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){
    ////
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-13 17:49:26

您正在尝试绑定一个表名,而不是一个参数。我不确定你真的能做到。

bindParam通过绑定问号持有者或命名的参数,而不是表名来工作。

代码语言:javascript
复制
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();

如果你只是在寻找占位符“替换”,你可以只使用sprintf,但要小心,因为如果你要做任何可疑或愚蠢的事情(比如从外部来源接受表名),它可能会泄漏。

例如:

代码语言:javascript
复制
$theQ = "SELECT * FROM `%s` LEFT JOIN `%s` ON `%s` = `%s`";
$runQ = sprintf($theQ, 'one', 'two', 'three', 'four');
票数 2
EN

Stack Overflow用户

发布于 2012-11-13 17:51:24

您需要提供一个有效的SQL语句,其中只对文字进行参数化。即使数据库驱动程序愚蠢到可以接受查询,您最终也会执行如下内容:

代码语言:javascript
复制
SELECT * FROM 'area'

..。这显然不是你想要的。

票数 1
EN

Stack Overflow用户

发布于 2012-11-13 17:48:49

不能参数化表名,只能参数化参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13358483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档