代码之家  ›  专栏  ›  技术社区  ›  kittygirl

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

pdo
  •  0
  • kittygirl  · 技术社区  · 6 年前

    我想更新以下几个表:

    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\u转储结果, $tablesnames[$i] $newrecord string ,则, $id int ,则, $update3 false
    看起来一切正常但失败了,

    警告:PDO::prepare():SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解要在“”附近使用的正确语法?设置 postrecords =?哪里 id =?'

    有什么问题吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Peter van der Wal    6 年前

    (遗憾的是)您不能在准备好的语句中为表名使用参数。您只能将其用于 数据 文字。所以 UPDATE :surveytable 无效。

    根据 manual :

    参数标记可以表示完整的 仅限数据文字 也不 部分文字,nor关键字, nor标识符 ,也不是任意的 可以使用参数绑定查询部件。

    当你( 彻底地 )信任您的来源 $tablesnames 使用

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

    相反