如何在wordpress中使用mysql事务?

Posted

技术标签:

【中文标题】如何在wordpress中使用mysql事务?【英文标题】:How to use mysql transaction in wordpress? 【发布时间】:2013-10-09 20:15:36 【问题描述】:

我要删除 10 个孩子,如果一个是活动的,全部删除都会回滚。

【问题讨论】:

您可以在一个查询中删除它。 确保您也在使用正确的 mysql 引擎进行事务 - 您正在运行什么版本? 【参考方案1】:

我从未尝试过,没有什么特别的,但它只是运行一个查询,例如(在START TRANSACTION 之后运行您的查询并使用COMMITROLLBACK,具体取决于结果):

mysql_query('START TRANSACTION');
$res1 = mysql_query('query1');
$res2 = mysql_query('query2');
If ( $res1 && $res2 ) 
    mysql_query('COMMIT'); // commits all queries
 else 
    mysql_query('ROLLBACK'); // rollbacks everything

因此,它可以转换为 wordpress,使用类似的东西

$wpdb->query('START TRANSACTION');
$result1 = $wpdb->delete( $table, $where, $where_format = null );
$resul2 = $wpdb->delete( $table, $where, $where_format = null );
if($result1 && $result2) 
    $wpdb->query('COMMIT'); // if you come here then well done

else 
    $wpdb->query('ROLLBACK'); // // something went wrong, Rollback

您也可以使用try catch,如this answer,(不是WordPress,而是相同的想法)。您可以在Codex 上阅读有关$wpdb 查询函数(querydelete)的更多信息。

MySQL 默认的 MyISAM 存储引擎不支持事务, 所以这不是一个选择。如果要使用事务,请确保所有 您的表被定义为 InnoDB。

【讨论】:

这似乎对我不起作用。我START TRANSACTION,截断一个表,插入59行,COMMIT。但我可以在此期间在 Navicat 中打开表,它显示的行数少于 59 行,因此看来事务对我不起作用。有什么方法可以在代码中确认START TRANSACTION 成功了吗?

以上是关于如何在wordpress中使用mysql事务?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库的事务管理

如何使用PHP Wordpress将沙箱Paypal返回值插入MySQL表?

使用php通过wordpress在mysql数据库中添加新行

如何在 WordPress 中编辑单个页面

如何优雅地回答 MySQL 的事务隔离级别和锁的机制?

mysql的事务处理与锁表