php - MySQL 多查询 InnoDB
问题描述
我是 InnoDB 事务的新手。我正在学习,但我对此有疑问。
<?php
include_once("../../../../../wp-config.php");
global $wpdb;
$cats_table = $wpdb->prefix . "jb_menu_groups";
$relation = $wpdb->prefix . "jb_relations";
$mysqli = new mysqli($wpdb->dbhost, $wpdb->dbuser, $wpdb->dbpassword, $wpdb->dbname);
if ($mysqli -> connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
exit();
}
// Turn autocommit off
$mysqli -> autocommit(FALSE);
$mysqli -> query("DELETE FROM $cats_table WHERE id=6");
$mysqli -> query("DELETE FROM $relation WHERE groupid=3");
// Commit transaction
if (!$mysqli -> commit()) {
echo "Commit transaction failed";
exit();
}
$mysqli -> rollback();
$mysqli -> close();
?>
如果我创建一个错误的查询来测试提交和回滚,则代码会成功运行另一个查询。
如何在一个事务中执行多个查询,如果一个查询有错误,请回滚并取消事务?
解决方案
我个人只使用 PDO 和事务,但这就是它应该如何使用 mysqli:
// start the transaction
$mysqli->autocommit(false);
$catQuery = $mysqli->query("DELETE FROM $cats_table WHERE id=6");
$relationQuery = $mysqli->query("DELETE FROM $relation WHERE groupid=3");
if ($catQuery && $relationQuery) {
// in case the db server confirms the correctness of the queries, commit the transaction
$mysqli->commit();
} else {
// something went wrong
$mysqli->rollback();
}
// don't forget to reset the transaction mode again, in case your app isn't ending here
$mysqli->autocommit(true);
请确保不要CREATE, ALTER or DROP
在事务中包含语句,因为这将立即提交更改。
推荐阅读
- javascript - 如何将一些文本标签添加到 roundSlider
- python - Can I inverse transform the intercept and coefficients of LASSO regression after using Robust Scaler?
- python-3.x - 用于匹配多种情况中的任何一种的操作数
- c# - IOS 在启动画面中不显示徽标
- logstash - logstash 时间戳日期过滤器
- go - 如何从 Windows 服务运行另一个可执行文件
- c# - DataTable 未绑定到 WPF MVVM 中的 DataGrid
- android - 无法从 Firebase 身份验证中检索所有用户的列表
- c# - ASP.NET Core 可以在运行时将对象保存在内存中吗?
- firebase - 是否有任何可能的方式使用 Facebook Api 在 React Native 2019 中向 Facebook 用户发送好友请求