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影片教學
#以上是PHP中如何使用mysqli的交易與預處理語句的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
