PHP中如何使用mysqli的事务与预处理语句
对于MySQLi来说,事务和预处理语句当然是它之所以能够淘汰MySQL扩展的资本。我们之前也已经学习过了PDO中关于事务和预处理语句相关的内容。所以在这里,我们就不再多讲理论方面的东西了,直接上代码来看看MySQLi中这两大特性与PDO在使用上的区别。
事务处理
首先,我们还是要让 MySQLi 对于错误的语句也报出异常来。关于这个功能就和 PDO 很不一样了。在 PDO 中,我们直接指定连接的报错属性就可以了。而在 MySQLi 中,我们则需要指定 MySQLi_Driver 对象中的报错属性为抛出异常,很明显,MySQLi_Driver 就是 MySQLi 的驱动对象。
// 使用异常处理错误情况 $driver = new mysqli_driver(); $driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
这样就指定了在使用 MySQLi 扩展时,所有的错误信息都会作为异常抛出。
接下来的内容,其实就和 PDO 很相似了。
try { // 开始事务 $mysqli->begin_transaction(); $mysqli->query("insert into tran_innodb (name, age) values ('Joe', 12)"); $mysqli->query("insert into tran_innodb2 (name, age) values ('Joe', 12)"); // 不存在的表 // 提交事务 $mysqli->commit(); } catch (Exception $e) { // 回滚事务 $mysqli->rollback(); var_dump($e->getMessage()); // string(44) "Table 'blog_test.tran_innodb2' doesn't exist" }
我们同样是使用一个 begin_transaction() 来启动事务。然后通过 commint() 方法来提交事务。在这段测试代码中,第二条 SQL 语句是会报错的,于是进入了 catch 中,使用 rollback() 来回滚事务。
预处理语句
总体来说,事务的处理和 PDO 的区别不大,但是预处理语句和 PDO 中的使用的区别就有一些了。首先是我们的 MySQLi 中的占位符只有 ? 问号占位。另外也只有 bind_param() 没有类似于 PDO 中的 bindValue() 方法。
$stmt = $mysqli->prepare("select * from zyblog_test_user where username = ?"); $username = 'aaa'; $stmt->bind_param("s", $username); // 绑定参数 $stmt->execute(); // 执行语句 $aUser = $stmt->fetch(); // 获取mysqli_result结果集对象 $username='bbb'; $stmt->bind_param('s', $username); $stmt->execute(); $bUser = $stmt->fetch(); var_dump($aUser); // array(4) { // ["id"]=> // int(1) // ["username"]=> // string(3) "aaa" // ["password"]=> // string(3) "aaa" // ["salt"]=> // string(3) "aaa" // } var_dump($bUser); // array(4) { // ["id"]=> // int(2) // ["username"]=> // string(3) "bbb" // ["password"]=> // string(3) "bbb" // ["salt"]=> // string(3) "123" // }
从代码中可以看出,bind_param() 方法的使用也和 PDO 有很大的不同。它不需要下标,而是给了一个 s 参数。这个参数表明的是绑定数据的类型,s 就是字符串类型。其它的类型我们在学习 MySQLi_STMT 相关的内容时再深入的了解。
总结
其实从代码层面来说,大部分的内容都是和 PDO 非常相似的,只是有些参数的不同而已。对于我们来说,还是多以学习了解为主,在自己封装或者使用某些以 MySQLi 为底层数据库操作的框架时不至于晕头转向。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/7.PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句.php
推荐学习:php视频教程
Atas ialah kandungan terperinci PHP中如何使用mysqli的事务与预处理语句. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
