如何使用PDO动态构建查询


How to dynamically build queries with PDO

我使用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提供的,而是由您的用户/访问者/等提供的,这是最特别的……

还有一件事;请避免使用*并为您的列命名…请看一些原因:

http://www.jasonvolpe.com/topics/sql/

使用SELECT *?

查看其他类似的帖子:

为什么ORDER BY子句中的't binding参数不对结果排序?

如何使用准备好的PDO语句设置ORDER BY参数?