我是 InnoDB 事務的新手。我正在學習,但我對此有疑問。<?phpinclude_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 transactionif (!$mysqli -> commit()) { echo "Commit transaction failed"; exit();}$mysqli -> rollback();$mysqli -> close();?>如果我創建一個錯誤的查詢來測試提交和回滾,則代碼會成功運行另一個查詢。如何在一個事務中執行多個查詢,如果一個查詢有錯誤,請回滾并取消事務?
1 回答

慕妹3146593
TA貢獻1820條經驗 獲得超9個贊
我個人只使用 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在事務中包含語句,因為這將立即提交更改。
- 1 回答
- 0 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消