您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關PHP中MySQLi的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
MySQLi 擴展允許我們訪問 MySQL4.1 及以上版本的數據庫所提供的功能。它是專門針對于 MySQL 數據庫的,不像 PDO 可以通過不同的 dns 來連接不同的數據庫。
首先,我們還是回顧一下最早的 MySQL 擴展。
只面向過程
不支持 存儲過程 、 多語句執行 、 預處理語句
PHP7 中已經刪除了并且完全不支持
然后是 PDO
僅支持面向對象方式使用
可以連接多種數據庫,切換數據庫帶來的變更少,甚至可能不用修改代碼
支持 存儲過程 、 多語句執行 、 預處理語句
最后就是 MySQLi 。
支持面向對象和面向過程兩種寫法
僅支持 MySQL 數據庫
支持 存儲過程 、 多語句執行 、 預處理語句
跟隨 PHP 及 MySQL 的版本更新,可以更快速地支持更多的 MySQL 高級特性
從它們三個的這些特點來看,MySQL(原始)擴展肯定是不推薦了,就算是老的項目,只要是支持 PDO 或 MySQLi 的 PHP 版本,都應該考慮將數據庫的連接轉換成這兩種方式之一。如果你還在 PHP5 的環境中學習 MySQL(原始)擴展的使用的話,也可以放下了。
而對于 PDO 和 MySQLi 的選擇來說,就仁者見仁智者見智了。本身它們其實并沒有什么太大的差別,不過現代化的大型框架中基本都會將 PDO 作為默認的數據庫連接來進行封裝,畢竟它的可移植性可以方便這些通用框架連接不同的數據庫。而一些小型的框架或項目中,還是能夠見到 MySQLi 的身影。
當然,小眾并不意味著不好,就像日常開發中,我們很少會在 PHP 環境中使用別的數據庫,那么在自己的小項目中完全使用一套 MySQLi 來操作數據庫反而更加地方便快捷。同時,老項目如果要切換到 PHP7 版本的話,如果之前使用的是 MySQL(原始)連接的數據庫,也能夠快速地將 MySQL(原始)的代碼很方面地替換到 MySQLi 。
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中MySQLi的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。