bindParam PDO PHP

时间:2012-11-13 09:46:32

标签: php pdo

我遇到绑定param或值的问题,有人知道什么是错的吗? 如果我改变了?到它的工作区域: - $

$item = 'area';
$query = dbConnectionPDO::getConnect()->prepare( ' SELECT * FROM  ? ' );
$query->bindParam(1, $item, PDO::PARAM_STR);
$query->execute();

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

这是一个很好的解决方案吗?它有效!

$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)){
    ////
}

3 个答案:

答案 0 :(得分:2)

您正在尝试绑定表名,而不是参数。我不确定你能不能这样做。

bindParam通过绑定问号标记命名 parmeter ,而不是表名。

$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,但要小心,因为如果您要做任何腥或愚蠢的事情(比如从外部来源接受表名),它可能会泄漏

例如:

$theQ = "SELECT * FROM `%s` LEFT JOIN `%s` ON `%s` = `%s`";
$runQ = sprintf($theQ, 'one', 'two', 'three', 'four');

答案 1 :(得分:1)

您需要提供一个有效的SQL语句,其中只有文字被参数化。即使数据库驱动程序足够愚蠢以接受查询,您最终也会执行以下操作:

SELECT * FROM 'area'

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

答案 2 :(得分:0)

您无法参数化表名,只能参数。