我正在使用PDO并希望做这样的事情:
$query = $dbh->prepare("SELECT * FROM :table WHERE :column = :value");
$query->bindParam(':table', $tableName);
$query->bindParam(':column', $columnName);
$query->bindParam(':value', $value);
PDO会允许我像这样绑定表名和列名吗? 似乎允许它,但即使我使用PDO :: PARAM_INT或PDO :: PARAM_BOOL作为数据类型,它也会在我的参数周围加上引号。
如果这不起作用,我怎样才能安全地转义我的变量,以便我可以在查询中插入它们?
答案 0 :(得分:13)
不幸的是,您无法按列名绑定参数。
您可以尝试动态创建SQL命令:
$sql = "SELECT * FROM $tableName WHERE $columnName = :value";
$query = $dbh->prepare($sql);
$query->bindParam(':value', $value);
如果它们来自其他地方,请确保清理参数/变量,以防止SQL注入。在这种情况下,$value
安全到一定程度,但$tableName
和$columnName
不是 - 再次,尤其是如果这些变量的值是不是由you
提供,而是由您的用户/访客/等提供......
另一件事;请避免使用*
并为您的列命名...请参阅以下原因:
http://www.jasonvolpe.com/topics/sql/
Performance issue in using SELECT *?
在此处查看其他类似帖子:
Why doesn't binding parameter in ORDER BY clause order the results?
答案 1 :(得分:-3)
从您的问题中不清楚为什么您想要“绑定”?表名。
PDO参数绑定的选项是
制作表或视图变量会破坏语句准备的目的。