三分鐘帶你了解PHP中MySQLi
從這篇文章開始,我們學習MySQLi擴充。可以說MySQL(原始)擴充是我們很多人剛開始學習PHP時連接資料庫的入門導師。現在如果想要使用過程式的程式碼來操作資料庫,只能使用mysqli擴充了。
關於 PDO 的學習我們告一段落,從這篇文章開始,我們繼續學習另外一個 MySQL 擴展,也就是除了 PDO 之外的最核心的 MySQLi 擴展。可以說它的祖先,也就是 MySQL(原始) 擴充功能是我們很多人剛開始學習 PHP 時連接資料庫的入門導師。不過隨著時代的變遷,MySQL(原始) 擴充在 PHP7 中已經被徹底廢棄了。現在如果想要使用過程式的程式碼來操作資料庫,只能使用 mysqli 擴充了。當然,mysqli 擴充也是支援物件導向式的寫法的。
什麼是 MySQLi
MySQLi 擴充功能讓我們可以存取 MySQL4.1 以上版本的資料庫所提供的功能。它是專門針對 MySQL 資料庫的,不像 PDO 可以透過不同的 dns 來連接不同的資料庫。
與 MySQL 與 PDO 的差異與連結
首先,我們還是回顧一下最早的 MySQL 擴充。
只以過程
不支援預存程序、 多語句執行、 預處理語句
PHP7 中已經刪除了並且完全不支援
然後是PDO
只支援物件導向方式使用
可以連接多種資料庫,切換資料庫帶來的變更少,甚至可能不用修改代碼
-
#支援預存程序、 多語句執行、 預處理語句
最後就是MySQLi 。
支援物件導向與過程兩種寫法
#僅支援MySQL 資料庫
支持預存程序、 多語句執行、 預處理語句
跟隨PHP 及MySQL 的版本更新,可以更快速地支援更多的MySQL 進階特性
#從它們三個的這些特點來看,MySQL(原始)擴充肯定是不推薦了,就算是老的項目,只要是支援PDO 或MySQLi 的PHP 版本,都應該考慮將資料庫的連線轉換成這兩種方式之一。如果你還在 PHP5 的環境中學習 MySQL(原始)擴充功能的使用的話,也可以放下了。
而對於 PDO 和 MySQLi 的選擇來說,就仁者見智者見智了。本身它們其實並沒有什麼太大的差別,不過現代化的大型框架中基本上都會將 PDO 作為預設的資料庫連接來進行封裝,畢竟它的可移植性可以方便這些通用框架連接不同的資料庫。而在一些小型的框架或專案中,還是能夠見到 MySQLi 的身影。
當然,小眾並不意味著不好,就像日常開發中,我們很少會在PHP 環境中使用別的資料庫,那麼在自己的小專案中完全使用一套MySQLi 來操作資料庫反而更方便快速。同時,舊專案如果要切換到 PHP7 版本的話,如果之前使用的是 MySQL(原始)連接的資料庫,也能夠快速地將 MySQL(原始)的程式碼很方面地替換到 MySQLi 。
擴充功能的安裝及 MySQL8 需要注意的地方
MySQLi 的擴充功能是隨 PHP 原始碼一起發佈的,我們在編譯 PHP 的時候加上 --with-mysqli 就可以了。現在預設的資料庫驅動都是使用的 mysqlnd ,libmysql 也已經基本淘汰了。所以在編譯時不需要再加上其它的參數,直接進行編譯即可。
在連接 MySQL8 的時候需要注意,因為 MySQL8 伺服器會預設使用 caching_sha2_password 作為密碼的加密。而 PHP7.2.4 之前的版本中的 MySQLi 會使用 mysql_native_password 來對連線密碼進行加密,這樣就會導致無法連接到資料庫。大家可以修改 my.cnf 文件,設定 default_authentication_plugin=mysql_native_password ,讓 MySQL8 也用 mysql_native_password 來加密使用者密碼。
針對過程式
上文說過,MySQLi 是支援兩種寫法的,也就是物件導向和物件導向過程。簡單理解就是一種是 MySQL(原始)擴充的寫法,另一種寫法是類似 PDO 的寫法。我們先來看看過程導向的寫法。
$mysqli = mysqli_connect("localhost", "root", "", "blog_test"); $res = mysqli_query($mysqli, "SELECT * FROM zyblog_test_user"); $row = mysqli_fetch_assoc($res); print_r($row);
是不是感覺 MySQL(原始)擴充功能的程式碼要移植過來真的很方便。方法名稱上全部改成 mysqli_xxx 就可以了。
物件導向式
物件導向式的就有點像 PDO 。我們要先取得一個連接句柄類,然後操作這個類別就可以了。
$mysqli = new mysqli("localhost", "root", "", "blog_test"); $res = $mysqli->query("SELECT * FROM zyblog_test_user"); $row = $res->fetch_assoc(); print_r($row);
面向对象和面向过程混用
另外,这两种方式还可以混合使用,不过并不推荐。混合起来使用的话很容易让看代码的人晕头转向。所以,最好还是在一个项目中就坚持使用一种方式。
$mysqli = new mysqli("localhost", "root", "", "blog_test"); $res = mysqli_query($mysqli, "SELECT * FROM zyblog_test_user"); $row = $res->fetch_assoc(); print_r($row);
在这段代码中,我们实例化了一个 mysqli 对象,然后使用面向过程的 mysqli_query() 函数来执行语句,接着又使用面向对象的方式来获取结果集。是不是很乱?但是它是可以正常运行的。
总结
从上面的内容中可以看出,PDO 的特点是支持多种不同类型的数据库,就像 Java 中的 JDBC 一样。而 MySQLi 虽然只支持 MySQL 数据库,但它却可以同时支持面向对象和面向过程两种写法。是我们针对老项目代码进行升级优化的好帮手。同时,它还是现在入门 PHP 学习相关数据库操作的首选。在接下来的文章中,我们将默认只使用 面向对象 式的写法来继续学习 MySQLi 扩展相关的知识。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/4.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和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
