PHP 在初期就支援 MySQL了,它的第2版本就包含了一個API。因為它倆的結合太普遍了,所以該擴展預設就是開啟的。不過 PHP 5 發布了一個更新的 MySQL 擴展,叫做 MySQL Improved,簡稱 mysqli。
為什麼要出新擴充呢?原因有兩方面。首先MySQL的快速發展,那些依賴舊擴充的使用者沒法利用新特性,如prepared statements、進階連線選項以及安全提升。第二,雖然那個舊擴展當然用起來也不錯,但許多人認為過程化的接口過時了,他們更喜歡面向對象的接口,因為不僅能與其他應用程序更緊密地集成,還能根據需要擴展此接口。為解決這些不足,MySQL開發人員決定是時候改造一下那個擴展,不僅修改了內部行為實現了效能提升,還引入了額外的特性促進了更新版本的MySQL中的可用特性的使用。
幾點關鍵的改進:
# 物件導向:mysqli擴充被封裝到一系列類,從而鼓勵使用許多人認為比PHP傳統的流程化方法更方便、更有效率的程式設計範式。但是那些喜歡過程化範式的人也不要擔心,因為它也提供了一個傳統的過程化介面。
# prepared statements:能夠阻止SQL注入攻擊。它消除了那些重複執行的查詢的開銷和不方便。
# 事務支援:儘管PHP最初的MySQL擴充也能支援事務功能,mysqli 擴充提供了這些功能的一個物件導向的介面。
# 增強的調試功能:mysqli 擴充聽過了許多方法用於調試查詢,更使開發過程更有效率。
# 內嵌的伺服器支援:MySQL 4.0 release 引進了一個內嵌的MySQL server 函式庫,有興趣的使用者就可以在客戶端應用例如桌面程式中執行一個完整的MYSQL伺服器了。 mysqli 擴充功能提供了一些方法用於連接和操作這些內嵌的MySQL伺服器。
# 主/從支援:從 MySQL 3.23.15 開始,MySQL 就提供了複製的支援。使用 mysqli 擴展,你可以保證查詢會被轉到一個複製配置中的主伺服器。
那些對最初的MySQL擴充熟悉的使用者會發現增強的mysqli擴充很眼熟,幾乎是一樣的命名約定。例如,資料庫連線函數叫mysqli_connect而不是mysql_connect。
1、安裝的先決條件
從PHP 5開始,MySQL支援不在於標準PHP分發包捆綁。因此,需要明確配置PHP才能利用此擴充。
1.1、在Linux/UNIX中啟用mysqli擴充
設定PHP的時候使用 --with-mysqli 標識。它應該指向 MySQL 4.1 以及更高版本中的 mysql_config 程式的位置。
1.2、在Windows上開啟mysqli擴充
需修改php.ini,取消這行前面的註解:extension=php_mysqli.dll,如果沒有的話,加上這一行。當然,在啟用任何擴充功能之前,請確保PHP的 extension_dir指令指向適當的目錄。
1.3、使用MYSQL本地驅動程式
一直以來,PHP 要求運行PHP程式的那台伺服器上要安裝 MySQL client library,而不管MYSQL伺服器恰好在本地或是在其他位置。 PHP 5.3 除去了這個要求,它引進了一個新的MySQL驅動,叫作MySQL Native Driver,也被叫做mysqlnd,它比剛才說的那個驅動要有很多優點。它不是新的API,而是新的“導管”,現有的API(mysql,mysqli,PDO_MySQL)可以利用這個導管與一個MySQL伺服器通訊。建議用mysqlnd,而不要使用其他驅動程式(除非你有非常充分的理由)。
要將 mysqlnd和某個擴充一起使用,你需要重新編譯PHP,例如:--with-mysqli=mysqlnd。也可以多指定幾個,如%>./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
mysqlnd 驅動也有一些限制。目前它不提供壓縮以及SSL支援。
1.4、管理使用者權限
當一個腳本初始化一個到MySQL伺服器的連線時,權限就會被傳遞和檢驗。還有在提交需要權限檢驗的命令時也是一樣。不過,你只需在連接時確認執行用戶;除非後來搞了一個新連接,否則腳本的後續執行都將一直是那個用戶。
1.5、使用範例資料
學新知識時加上一些例子就簡單了。資料庫:corporate;表格:products
CREATE TABLE products (
id INT NOT NULL AUTO_INCREMENT,
sku VARCHAR(8) NOTULL
price DECIMAL(5,2) NOT NULL,
PRIMARY KEY(id)
)
===================================== ========================================
2、使用mysqli 擴充
2.1 、建立和斷開連線
先要連接到伺服器,然後選擇一個資料庫,之後是關閉連線。物件導向、過程化 這2種風格都是可以的。
用物件導向介面和MySQL伺服器交互,首先要用mysqli類別的建構器實例化它。
mysqli([string host [, string username [, string pswd
[, string dbname [, int port, comm MySQL的使用者會發現這個構造函數的許多參數和傳統的mysql_connect()函數是一樣的。
$mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate');
如果某個時刻,你想切換到其他伺服器或選擇另一個資料庫,你可以用connect()和select_db()方法。 connect()方法的參數和mysqli類別的建構子一樣。
// Instantiate the mysqli class
$mysqli = new mysqli();
// Connect to the database server and select a database
$mysqli-rootconnect('losqli’ 'corporate');
------------------------------------------- ---------------------------------------
或
// Connect to the database server
$mysqli = new mysqli('localhost', 'catalog_user', 'secret');
// Select the database
$mysqli->select_db('corporate');任何開啟的資料庫連線會自動關閉,資源也會恢復。然而,也有可能一個頁面在執行的過程中需要用到多個資料庫連接,這些連接都需要正確地被關閉。即使只使用了一個連接,也應該在腳本的最後將其關閉,這是一種很好的實踐方法。 $mysqli->close()。
2.2、處理連接錯誤
應仔細監控連接錯誤,並相應地做出應對措施。 mysqli 擴充功能提供了一些特性,能夠被用來捕捉錯誤訊息,還有一種方法就是利用異常。例如,mysqli_connect_errno() 和 mysqli_connect_error() 就能夠被用來診斷和顯示MySQL連線錯誤訊息。
2.3、取得錯誤訊息
2.3.1、取得錯誤碼
errno() 方法傳回上一次MySQL函數執行過程中產生的錯誤碼。 0表示沒有錯誤。
$mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate');
printf("Mymy errorate');
printf("My 錯誤;
?>
2.3.2、取得錯誤訊息
error() 方法傳回最近產生的錯誤訊息。沒有錯誤回傳的就是空字串。訊息語言依賴 Mysql 資料庫伺服器。
2.4、在一個獨立文件中儲存連接資訊
在安全程式設計實踐的想法中,定期修改密碼是個不錯的主意。還有就是有很多要存取資料庫的腳本,一個個修改太麻煩了。辦法是存在單獨的一個文件中,必要時將其包含到你目前的文件中。
例如,可以將mysqli 建構子放在一個頭檔中(mysql.connect.php):
$mysqli = new mysqli('lohosthost' ');
?>
然後在其他文件中包含它:
include 'mysql.connect.php';
= be ==================未完,待續以上就介紹了使用 PHP 和 MySQL,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。