mysqli->autocommit(; false);" kaedah untuk mematikan penyerahan automatik."/> mysqli->autocommit(; false);" kaedah untuk mematikan penyerahan automatik.">
Rumah > Artikel > pembangunan bahagian belakang > Apakah yang perlu saya lakukan jika transaksi php tidak boleh ditarik balik?
Penyelesaian kepada masalah bahawa urus niaga PHP tidak boleh ditarik balik: 1. Buka fail PHP yang sepadan 2. Semak kod "function update_user_set_date_of_birth($date_of_birth){...}" 3. Pass "$ this-> Mysqli->autocommit(false);" boleh digunakan untuk mematikan penyerahan automatik.
Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 8.1, komputer Dell G3.
Apakah yang perlu saya lakukan jika transaksi PHP tidak boleh ditarik balik?
Perihalan masalah:
Mengenai transaksi php yang tidak melakukan rollback
mysqliphptransactions Transactions not doing the rollback
Saya mempunyai fungsi untuk mengemas kini pengguna:
function update_user_set_common($date_of_birth, $mobile, $street, $housenumber, $addition, $postal_code, $location, $country) { try { $this->mysqli->begin_transaction(); $this->update_user_set_date_of_birth($date_of_birth); $this->update_user_set_mobile($mobile); $this->update_user_set_address($street, $housenumber, $addition, $postal_code, $location, $country); $this->mysqli->commit(); return true; } catch (Exception $e) { $this->mysqli->rollback(); echo"Error:" . $e; return false; } }
Seperti yang anda lihat, saya membuat perdagangan. Jika semuanya OK, ia harus dilakukan, jika ralat berlaku, ia harus digulung semula.
Berikut ialah contoh cara pertanyaan kemas kini saya berfungsi:
function update_user_set_date_of_birth($date_of_birth) { return $this->update_user_set_singlefield(COL_USER_DATE_OF_BIRTH, $date_of_birth); } function update_user_set_singlefield($field, $value) { if ($update_stmt = $this->mysqli->prepare("UPDATE" . TABLE_USER ." SET" . $field ." = ? WHERE" . COL_USER_ID ." = ?")) : if (!$update_stmt->bind_param("ss", $value, $this->USER_ID)) : $update_stmt->close(); return false; endif; if (!$update_stmt->execute()) : $update_stmt->close(); return false; else : $update_stmt->close(); return true; endif; else : return false; endif; }
Jadi sekarang contohnya kemas kini_pengguna_set_mudah alih gagal, tetapi tiada pemulangan semula. Kenyataan sebelum update_user_set_date_of_birth masih akan dilaksanakan dan tidak akan berubah kembali kepada yang asal.
Mengapa tiada rollback?
Contoh penciptaan jadual untuk menunjukkan kepada saya menggunakan innodb:
CREATE TABLE `USER` ( `USER_ID` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT, `USER_E_MAIL` varchar(255) COLLATE utf8_bin NOT NULL, `USER_PASSWORT` varchar(255) COLLATE utf8_bin NOT NULL, `USER_PASSWORT_SALT` varchar(255) COLLATE utf8_bin NOT NULL, `USER_FIRSTNAME` varchar(255) COLLATE utf8_bin NOT NULL, `USER_LASTNAME` varchar(255) COLLATE utf8_bin NOT NULL, `USER_DATE_OF_BIRTH` varchar(200) COLLATE utf8_bin DEFAULT NULL, `USER_MOBILE` varchar(255) COLLATE utf8_bin DEFAULT NULL, `ADDRESS_ID` bigint(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Masalah diselesaikan:
Matikan autokomit bukannya mysqli-> );
$this->mysqli->autocommit(false);
http://php.net/manual/zh/mysqli.autocommit.php
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika transaksi php tidak boleh ditarik balik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!