一尘不染

如何使用PDO动态构建查询

php

我正在使用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作为数据类型。

如果这不起作用,如何安全地对变量进行转义,以便可以在查询中对它们进行插值?


阅读 266

收藏
2020-05-29

共1个答案

一尘不染

不幸的是,您不能按列名绑定参数。

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

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

只要确保对参数/变量来自其他地方进行消毒,就可以防止SQL注入。在这种情况下,$value是安全 的程度
,但$tableName$columnName没有-再次,这是最特别的是,如果不提供通过这些变量的值you和而不是用户/访港的/ etc

2020-05-29