是否可以为表名执行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();
}
答案 0 :(得分:0)
由于预处理语句比sprintf
更“有点”,因此按变量设置表是没有意义的。
在设置实际值之前,会将预准备语句传递给DB。因此,DB可能会寻找如何回答查询的方法。在准备之后,设置搜索的实际值。在调用execute()
时,将回答查询。
因此,为了准备“如何回答查询的方式”(我称之为),表名是一个重要信息。这就是将它作为变量传递没有意义的原因。这也是它不起作用的原因。
因此,您必须对表名称进行字符串连接:
$sql = 'UPDATE '. $table .' SET
archive = :archive
WHERE id = :id';
正如@zerkms建议的那样,您应该将可能的表名列入白名单。