我正在使用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和而不是用户/访港的/ etc …
$value
$tableName
$columnName
you