如何在wordpress中使用mysql事务?
Posted
技术标签:
【中文标题】如何在wordpress中使用mysql事务?【英文标题】:How to use mysql transaction in wordpress? 【发布时间】:2013-10-09 20:15:36 【问题描述】:我要删除 10 个孩子,如果一个是活动的,全部删除都会回滚。
【问题讨论】:
您可以在一个查询中删除它。 确保您也在使用正确的 mysql 引擎进行事务 - 您正在运行什么版本? 【参考方案1】:我从未尝试过,没有什么特别的,但它只是运行一个查询,例如(在START TRANSACTION
之后运行您的查询并使用COMMIT
或ROLLBACK
,具体取决于结果):
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
查询函数(query
和delete
)的更多信息。
MySQL 默认的 MyISAM 存储引擎不支持事务, 所以这不是一个选择。如果要使用事务,请确保所有 您的表被定义为 InnoDB。
【讨论】:
这似乎对我不起作用。我START TRANSACTION
,截断一个表,插入59行,COMMIT
。但我可以在此期间在 Navicat 中打开表,它显示的行数少于 59 行,因此看来事务对我不起作用。有什么方法可以在代码中确认START TRANSACTION
成功了吗?以上是关于如何在wordpress中使用mysql事务?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用PHP Wordpress将沙箱Paypal返回值插入MySQL表?