我写了一些代码,它构建了一个在页面加载结束时执行的多个insert和update语句的单个查询。以前工作还可以。我在我的开发系统(Ubuntu 14.04,PHP 5.5.3-Ubuntu)上编写类似的优化代码,但我不能再在一个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 :(得分:-1)
发现问题: 如果其中一个查询抛出异常,PDO将无提示失败。在我的情况下,第一个查询是可以的,但第二个是抛出完整性约束失败错误,所以看起来只有第一个查询正在运行。
一位聪明人告诉我:不要射杀信使,打破查询