我使用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作为数据类型,它也会在参数周围加引号。
如果这不起作用,我如何安全地转义我的变量,以便我可以在查询中插入它们?
遗憾的是,您不能通过列名绑定参数。
你可以尝试动态创建SQL命令:
$sql = "SELECT * FROM $tableName WHERE $columnName = :value";
$query = $dbh->prepare($sql);
$query->bindParam(':value', $value);
只要确保消毒你的参数/变量,如果他们来自其他地方,以防止SQL注入。在这种情况下,$value
在一定程度上是安全的,但$tableName
和$columnName
不是安全的——再次,如果这些变量的值不是由you
提供的,而是由您的用户/访问者/等提供的,这是最特别的……
还有一件事;请避免使用*
并为您的列命名…请看一些原因:
使用SELECT *?
查看其他类似的帖子:
为什么ORDER BY子句中的't binding参数不对结果排序?
如何使用准备好的PDO语句设置ORDER BY参数?