我遇到绑定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)){
////
}
答案 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)
您无法参数化表名,只能参数。