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

藏色散人
Lepaskan: 2023-03-17 07:18:01
asal
1237 orang telah melayarinya

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
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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;
Salin selepas log masuk

Masalah diselesaikan:

Matikan autokomit bukannya mysqli-> );

$this->mysqli->autocommit(false);
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!