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?

Apakah yang perlu saya lakukan jika transaksi php tidak boleh ditarik balik?

藏色散人
藏色散人asal
2022-10-20 09:49:131235semak imbas

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.

Apakah yang perlu saya lakukan jika transaksi php tidak boleh ditarik balik?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn