如果先前的查询有错误,以后的查询会发生什么

时间:2012-03-29 12:36:31

标签: php pdo

当我保存一组记录即多条记录时,如果中间的一条记录有错误(sql),会发生什么?以后所有记录都不会被插入,或只是当前行还是没有?我应该如何处理这种情况?

PDO驱动程序是Mysql

3 个答案:

答案 0 :(得分:2)

查看PDO-Transactions:http://php.net/manual/en/pdo.begintransaction.php

您可以检查是否存在错误,如果是,则回滚您的提交或执行您想要执行的任何操作

答案 1 :(得分:2)

这些情况由database transactions管理。

经典的例子是我想把钱从我的账户转到另一个账户。有两个问题要做:

  1. 从我的帐户中删除资金
  2. 将钱存入其他帐户
  3. 当然,如果第二个查询失败,我希望第一个查询被回滚并通知用户错误。这就是交易的目的。

    如果你不使用事务,当第二个查询失败时,第一个查询仍然执行而不回滚(因此钱就会消失)。这是MySQL的默认行为。

答案 2 :(得分:1)

一般解决方案是使用TRANSACTION (mysql) (pgsql) (mssql) 。你可以用它做什么以及你有多少控制权取决于RDBMS。例如:PostgreSQL允许您创建SAVEPOINT,您可以ROLLBACK TO

另一种解决方案是使用STORED PROCEDURE。在这种情况下,您可以指定DECLARE .. HANDLER

发生错误时应该发生的情况