警告:PDO :: prepare():SQLSTATE [42000]:语法错误或访问冲突:更新时为1064

时间:2018-04-29 14:17:33

标签: pdo

我想更新几个表格如下:

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]$newrecordstring$idint$update3false
似乎一切都好,但失败了,

  

警告:PDO :: prepare():SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用&#39;? SET postrecords =? id =?&#39;

问题是什么?

1 个答案:

答案 0 :(得分:0)

(很遗憾)您不能在预准备语句中使用tablename的参数。您只能将其用于数据文字。因此UPDATE :surveytable无效。

根据manual

  

参数标记只能代表完整的数据文字。也不   文字的一部分,也不是关键字,也不是标识符,也不是任意的   查询部分可以使用参数绑定。

当您(完全!!! )信任您$tablesnames的来源时,请使用

'UPDATE `' . $tablesnames[i]` . '` SET `postrecords`=:newrecord WHERE `id`=:id'

代替