PDO - 在一个查询中执行多次插入/更新

问题描述:

我编写了一些代码,这些代码构建了在页面加载结束时执行的多个插入和更新语句的单个查询。它曾经工作正常。我我的开发系统上写类似的,优化的代码(Ubuntu的14.04,PHP 5.5.3 Ubuntu的),但我不再能够在一个PDO查询运行多个语句:PDO - 在一个查询中执行多次插入/更新

我做什么

在一个页面渲染,我建立这看起来有点SQL语句,如:

insert into <table> (col1,col2,col3) VALUES (?,?,?); 
update <table> set col1 = ?, col4 = ? where id = ?; 
insert into <table> (col1,col2,col3) VALUES (?,?,?); 
... 

当页面已经被渲染,我敢肯定没有问题,我执行使用的包装查询PDO。包装功能的重要位

$database = new PDO("mysql:host=<host>;dbname=<dbname>", <user>, <pwd>, 
       array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names 'utf8'")); 
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $database->prepare($sql); 
$stmt->execute($params); 

出于某种原因,我不再能一重击,以执行该语句,相反,只有PDO尽管$stmt->queryString仍持有整个查询执行的第一个查询。任何人都可以帮助我解决这个问题。

+0

是什么给? 'try {$ stmt = $ database-> prepare($ sql); $ stmt->执行($ PARAMS); } catch(PDOException $ objException){echo print_r($ objException,true);} }'另请参阅:http://*.com/a/6461110/3000179 – 2014-10-20 14:08:45

+0

@ʰᵈˑ不会引发异常。它只运行第一个语句,在我的例子中,它是'insert in ...' – 2014-10-20 14:11:46

+2

*“我建立了一个看上去有点像这样的SQL语句:”* - 为什么不告诉我们你实际使用的是什么。这是猜测,充其量。 – 2014-10-20 14:12:42

发现问题: 如果其中一个查询引发异常,PDO将自动失败。在我的情况下,第一个查询是可以的,但第二个查询引发了完整性约束失败错误,所以看起来好像只有第一个查询正在运行。

聪明的人刚刚告诉我:不要迁怒于信使,打破了查询

+2

使用事务处理多个查询。 – tyteen4a03 2014-10-20 14:50:06

+0

@ tyteen4a03可怕的是我。 PDO完全无声无息 – 2014-10-20 14:51:32

+0

您最初使用它的方式并非如何使用它(如其他人所述)。 – tyteen4a03 2014-10-20 14:55:03