bindValue如何用于表名?

时间:2013-02-02 10:55:55

标签: php mysql pdo bindvalue

是否可以为表名执行bindvalue?我似乎没有拿起它基本上第二个2绑定工作正常,如果我删除:表并添加表名,但我想使用它来从同一表格中的多个表。

表单上的表的字段是从上一个查询的结果定义的,因此表名在表单上显示为值$ table,它正确显示所以这应该将$ table的值发布到表绑定? ??

try {
    $sql = 'UPDATE :table SET
                archive = :archive
                WHERE id = :id';
    $s = $pdo->prepare($sql);
    $s->bindvalue('table', $_POST['table']);
    $s->bindvalue('archive', $_POST['archive']);
    $s->bindvalue('id', $_POST['id']);
    $s->execute();
}

1 个答案:

答案 0 :(得分:0)

由于预处理语句比sprintf更“有点”,因此按变量设置表是没有意义的。

在设置实际值之前,会将预准备语句传递给DB。因此,DB可能会寻找如何回答查询的方法。在准备之后,设置搜索的实际值。在调用execute()时,将回答查询。

因此,为了准备“如何回答查询的方式”(我称之为),表名是一个重要信息。这就是将它作为变量传递没有意义的原因。这也是它不起作用的原因。

因此,您必须对表名称进行字符串连接:

$sql = 'UPDATE '. $table .' SET
            archive = :archive
            WHERE id = :id';

正如@zerkms建议的那样,您应该将可能的表名列入白名单。