我想更新几个表格如下:
for ($i=0; $i <count($tablesnames); $i++) {
$update3=$pdo->prepare('UPDATE :surveytable SET `postrecords`=:newrecord WHERE `id`=:id');
//var_dump()here
$update3->bindValue(':surveytable', $tablesnames[$i],PDO::PARAM_STR);
$update3->bindValue(':newrecord',$newrecord,PDO::PARAM_STR);
$update3->bindValue(':id',$id,PDO::PARAM_INT);
$update3->execute();
}
检查var_dump结果,$tablesnames[$i]
和$newrecord
为string
,$id
为int
,$update3
为false
。
似乎一切都好,但失败了,
警告:PDO :: prepare():SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用&#39;? SET
postrecords
=?id
=?&#39;
问题是什么?
答案 0 :(得分:0)
(很遗憾)您不能在预准备语句中使用tablename的参数。您只能将其用于数据文字。因此UPDATE :surveytable
无效。
根据manual:
参数标记只能代表完整的数据文字。也不 文字的一部分,也不是关键字,也不是标识符,也不是任意的 查询部分可以使用参数绑定。
当您(完全!!! )信任您$tablesnames
的来源时,请使用
'UPDATE `' . $tablesnames[i]` . '` SET `postrecords`=:newrecord WHERE `id`=:id'
代替