【问题标题】:Multiple insertion in mysql tablesmysql表中的多次插入
【发布时间】:2011-07-31 13:57:08
【问题描述】:

我在插入 mysql 表时遇到问题。我有 3 个相关的表要在保存时插入,但我想确保所有查询都运行,或者都不运行。我已经在 C# 中完成了此操作,但我想知道如何在 PHP 中完成此操作。

【问题讨论】:

    标签: php mysql commit rollback


    【解决方案1】:

    为了实现全有或全无行为,您需要使用事务:

    • 开始事务
    • 做您的查询
    • 如果所有查询都已成功执行,则提交
    • 否则,回滚。


    在 PHP 中,如果使用 PDO,您将需要使用 PDO::beginTransaction()PDO::commit()PDO::rollback() 方法。

    如果使用 MySQLi,您需要使用 mysqli::commit()mysqli::rollback() -- 在使用 mysqli::autocommit() 禁用自动提交之后。


    要检测查询是否失败,您需要:

    【讨论】:

    • 感谢您的回复。我正在使用核心 php。但我仍然对如何处理错误感到困惑。即我如何识别查询执行期间发生的错误。
    • 还需要注意的是:1) 除非表使用 InnoDB 引擎,否则服务器会忽略事务命令 2) 无论 API 是什么,您也可以手动运行相应的 SQL 命令。
    • 我已经编辑了我的答案以提供一些关于此的附加信息。 “core php”没有多大意义:您必须使用扩展名(PDO,mysql或mysqli)来连接到MySQL数据库 - 并且不应再使用mysql (不支持最新版本的 MySQL 引入的功能)
    • @Abhilash:我不想听起来很粗鲁,但是所有 DB 函数的返回值和异常在 PHP 手册中都有很好的解释。
    • 我在寻找错误处理和返回值的正确组合时遇到了一些麻烦。如果我们将返回值 >0 视为成功,那么在某些情况下受影响的行数将为零。如果我们采用错误处理方法,所有方法都必须包含在我的错误处理方法中……我完全糊涂了……请指导我……
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2015-05-02
    • 2011-12-20
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多