可以为表名做一个绑定值吗?如果我删除:table并添加表名称,那么第二个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();
}发布于 2013-08-11 14:54:10
由于预准备语句比sprintf多“一点”,因此通过变量设置表是没有意义的。
在设置实际值之前,会将准备好的语句传递给DB。所以DB可能会寻找一种如何回答查询的方法。在此准备之后,设置所搜索的实际值。当调用execute()时,查询将得到应答。
因此,为了准备“一种如何回答查询的方法”(正如我所说的),表名是一个重要信息。这就是为什么将其作为变量传递是没有意义的。这也是它不起作用的原因。
因此,您必须字符串连接表名:
$sql = 'UPDATE '. $table .' SET
archive = :archive
WHERE id = :id';正如@zerkms建议的那样,您应该将可能的表名列在白名单中。
https://stackoverflow.com/questions/14661136
复制相似问题