为什么多个更新语句不起作用

时间:2014-02-05 10:24:21

标签: mysql pdo

我已经在phpMyAdmin中检查了这个查询,这是可以的,但是在php脚本中这不起作用。我已经尝试了6个多小时,但我不明白错误是什么。我在PDO语句中的$db->query($query)中收到此错误。

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在'UPDATE sefx_article_paras SET srl ='1'WHERE id ='24'附近使用正确的语法;在

的第4行更新`sefx'

但是当我尝试使用PDO exec时没有错误,但是没有执行UPDATE查询。

这是PHP生成的SQL:

更新`sef

x_article_paras` 
SET `srl` = '1' WHERE `id` = '23';

UPDATE `sefx_article_paras` 
SET `srl` = '1' WHERE `id` = '24';

UPDATE `sefx_article_paras` 
SET `srl` = '1' WHERE `id` = '26';

UPDATE `sefx_article_paras` 
SET `srl` = '1' WHERE `id` = '27';

UPDATE `sefx_article_paras` 
SET `srl` = '1' WHERE `id` = '31';

....................


UPDATE `sefx_article_paras` 
SET `srl` = '8' WHERE `id` = '196';

UPDATE `sefx_article_paras` 
SET `srl` = '8' WHERE `id` = '211';

UPDATE `sefx_article_paras` 
SET `srl` = '8' WHERE `id` = '229';

1 个答案:

答案 0 :(得分:-1)

PDO不允许在预准备语句中进行多次查询。将它们拆分为多个查询或使用代码将它们拆分;

<?php
  // $sql is your SQL
  $sqls = explode(';', $sql);
  $db->query('BEGIN');
  foreach($sqls as $sql) {
    if (trim($sql)) {
      $db->query($sql);
    }
  }
  $db->query($sql);
?>