Mysqli基礎知識

傑楓Jeff發表於2015-07-15

       相信原來在開始學習php的時候,很多人使用的資料庫首選MySQL,連線資料庫的擴充套件首選mysql擴充套件,但隨著php版本的提高,mysql擴充套件正逐漸被mysqli和PDO所取代。正如使用mysql函式時給出的deprecated: The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead。學習mysqli擴充套件勢在必行了。

   相對於mysql擴充套件,mysqli擴充套件支援物件導向和麵向過程兩種方式,支援預處理,支援事務處理,而且速度比mysql速度更快。本篇將主要介紹mysqli的物件導向的基本簡單操作。

   mysqli安裝配置

  mysqli的安裝配置和其他配置一樣,首先要確認你的ext資料夾下存在php_mysqli.dll檔案(一般而言是存在的),並且在php.ini檔案中去掉“extension=php_mysqli.dll”這一行前的";",並且確定配置檔案中extension_dir='ext目錄所在的位置。重新啟動伺服器後,便可以使用mysqli擴充套件啦~

   如何驗證mysqli擴充套件已經開啟了呢?

   其實最直接的是使用mysqli擴充套件的函式看看能不能用,例如通過能否連線資料庫判斷擴充套件已經安裝完成。連線成功,不必說,自然是裝好了,連線不成功,也不要輕易認為沒有裝好,我們還有後招,利用phpinfo()函式,我們可以明確知道mysqli是否可用。

   當然可以通過extension_loaded('mysqli') 來判斷是否裝載mysqli擴充套件,甚至可以通過get_loaded_extensions()獲得到底裝載了哪些擴充套件。

  物件導向mysqli的使用

  對於使用過mysql擴充套件的開發者,mysqli無論是物件導向還是程式導向的 方式都是非常容易理解的,有種似曾相識的感覺。具體的屬性方法請參照php官方手冊,http://php.net/manual/zh/mysqli.summary.php,下面我我通過一段程式碼示例mysqli的使用過程。

本例中操作做的表為test表,有id,title兩個欄位。

 

<?php 
//配置檔案完成相關配置
define("HOST", "localhost");
define("USER", 'root');
define("PWD", '');
define("DB", 'yii');

//建立連線,生成mysqli例項物件。
$mysqli=new Mysqli(HOST,USER,PWD,DB);

if ($mysqli->connect_errno) {
    "Connect Error:".$mysqli->connect_error;
}
//設定預設的字符集
$mysqli->set_charset('utf8');
$sql="select * from test";
//生成mysql_result物件
$result=$mysqli->query($sql);

//返回二維關聯陣列,引數同理可以設定為MYSQLI_NUM返回索引陣列,或者MYSQLI_BOTH二者兼有。
$rows=$result->fetch_all(MYSQLI_ASSOC);


//將結果指標調整到任意行
$result->data_seek(2);
$row=$result->fetch_row();
//$row=$result->fetch_array();
//$row=$result->fetch_assoc();
//$row=$result->fetch_object();

//釋放結果集
$result->free();
//$result->free_result();
//$result->close();

//關閉連線
$mysqli->close();

以上程式碼僅僅是簡單地展現瞭如何 利用mysqli進行查詢,未對查詢結果集進行遍歷,如何取出陣列中的資料應該不是難事。

 

需要注意的是$mysqli->query()執行的sql語句,成功執行SELECT, SHOW, DESCRIBEEXPLAIN查詢會返回一個mysqli_result 物件,其他查詢則返回 TRUE,執行失敗則都返回false。

 

在進行INSERT,UPDATE,DELETE操作時可以呼叫$mysqli->affected_rows獲得受影響記錄條數

$mysqli->affected_rows 返回值 返回-1表明sql語句出現問題,0表示沒有受影響的記錄,其他數值則是受影響條數。

   

執行多條SQL語句,預處理,以及事務處理也是mysqli的重要內容,我會在後來的隨筆中寫到。

 

p個s:第一次寫技術部落格好緊張有木有!很多措辭不當的地方還是希望大家多多提意見~