我正在使用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/
在此处查看其他类似帖子: