如何使用PDO动态构建查询

ely*_*aie 9 php pdo

我正在使用PDO并希望做这样的事情:

$query = $dbh->prepare("SELECT * FROM :table WHERE :column = :value");
$query->bindParam(':table', $tableName);
$query->bindParam(':column', $columnName);
$query->bindParam(':value', $value);
Run Code Online (Sandbox Code Playgroud)

PDO是否允许我像这样绑定表名和列名?它似乎允许它,但即使我使用PDO :: PARAM_INT或PDO :: PARAM_BOOL作为数据类型,它也会在我的参数周围加上引号.

如果这不起作用,我怎样才能安全地转义我的变量,以便我可以在查询中插入它们?

Non*_*nym 13

不幸的是,您无法按列名绑定参数.

您可以尝试动态创建SQL命令:

$sql = "SELECT * FROM $tableName WHERE $columnName = :value";
$query = $dbh->prepare($sql);
$query->bindParam(':value', $value);
Run Code Online (Sandbox Code Playgroud)

如果它们来自其他地方,请确保清理您的参数/变量,以防止SQL注入.在这种情况下,在某种程度上$value是安全但是$tableName并且$columnName不是 - 再次,尤其是如果这些变量的值you不是由您的用户/访客/等提供的,而是由...提供的......

另一件事; 请避免使用*并命名您的列...请参阅以下原因:

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

使用SELECT*时的性能问题?

在此处查看其他类似帖子:

为什么ORDER BY子句中的绑定参数不对结果进行排序?

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