mysql擴展之mysqli

mysqli是最好最快的mysql擴展,唯一的缺陷是隻適用於mysql的操作。

首先查看mysql是否擴展mysqli(使用phpinfo()函數輸出查看),一般php5以上的版本都是支持mysqli的。mysqli包含三個比較重要的擴展類:mysqli,mysqli_result,mysqli_stmt

mysqli類的使用:

使用mysqli連接數據庫首先要new mysqli

<pre name="code" class="html"><span style="font-size:14px;">$config = array(
	"host" => "localhost",//主機
	"user" => "root",//用戶
	"pwd"  => "root",//密碼
	"dbname" => "test",//數據庫
	"charset" => "utf8",//字符集設置
);
$mysqli = new mysqli( $config["host"],$config["user"],$config["pwd"],$config["dbname"]  );//mysqli需要對具體數據庫進行操作</span>

在此申明一句:若數據庫沒開則服務器會保持一段較長時間的等待過程,因此,操作過程需保證mysql已經打開。

<span style="font-size:14px;">if( mysqli_connect_errno() )//使用mysqli_connent_errno()函數判斷是否連接到數據庫
	{
		echo "數據庫鏈接失敗";
		echo mysqli_connect_error();//用mysqli_connect_error()輸出具體錯誤
	}
	</span>
一般使用try{。。throw。。} catch(exception $e)來捕抓錯誤提示。具體的關於php異常處理可以參考本博客其他文章詳解。函數頭用error_reporting(0)來限制一些錯誤的提示。

在進行數據庫操作時需注意,最好將字符集設置好

<span style="font-size:14px;">$mysqli -> set_charset($config["charset"]);//echo "<br />當前鏈接字符狀態:".$mysqli->character_set_name();
</span>
對數據庫的增刪查改與傳統操作差不多

<span style="font-size:14px;">//$sql = "insert into user(id,name,sex)values('1','irudder','man')";//增加
//$sql = "update user set id=2 where name='irudder'";//修改
//$sql = "delete from user where id ='2'";//刪除
$sql = "select * from user";//查找</span>
使用$mysqli ->query($sql) 操作sql語句;使用$mysqli->errno 判斷是否有錯誤;使用$mysqli->error顯示錯誤


關於mysqli類的部分擴展知識:

<span style="font-size:14px;">echo "當前的mysql數據庫版本:".$mysqli->get_client_info()."<br />";
echo "當前的host信息:".$mysqli->host_info."<br />";
echo "當前的服務器的信息:".$mysqli->get_server_info()."<br />";
echo "當前的服務器的版本:".$mysqli->server_version."<br />";
echo "當前的sql版本是什麼:".$mysqli->protocol_version."<br />";</span>

musqli_result類的使用:

<span style="font-size:14px;">fetch_array - 獲取關聯數組,既有字段又有數字索引(效率相對較低)MYSQLI_NUM,MYSQLI_ASSOC,默認MYSQLI_BOTH

fetch_object - 返回一個數據對象,可以用面向對象的調用方式(一般不用,效率中等)

fetch_row - 獲取索引數組,效率高

fetch_assoc - 獲取字段數組(鍵符數組,效率高)

query		- 返回mysqli_result對象#1

store_result - 返回mysql_result對象#2

multi_query - 執行多條sql語句的操作,成功返回true,錯誤返回false
</span>
在使用multi_query進行多條SQL操作時,一旦其中有一條發生錯誤,則後面的語句都不會執行,但不會出現錯誤提示。


關於mysqli的stmt類的使用:

預處理技術:

客戶端將語句發送至數據庫會進行預處理,然後才返回處理後的請求。

$stmt = $mysqli  -> prepare($sql);//預處理數據

$stmt > bind_param('is',$id,$name);//i代表id的類型,s代表name的類型,可增加多個,param綁定指定數據庫字段,ide,name均可任意名字

<span style="font-size:14px;">$sql = "delete from user where id=?";
$stmt = $mysqli->prepare( $sql ); //一個預處理
$stmt -> bind_param( 'i',$id );
$id = 13;
$mysqli -> close(); //關閉了整個mysqli的擴展,釋放內存
</span>
$stmt包含一個緩衝區的函數store_result():客戶端將信息發去數據庫,數據庫處理後會存去緩存區有則直接用,無則更新,客戶端實際每次都是接收緩衝區的處理後信息,這樣就加快了處理速度。
<span style="font-size:14px;">if( $stmt -> store_result() ) //如果緩衝區裏面有我的數據,那麼我就拿回來
{
	$stmt -> bind_result( $id,$a,$b );
	while( $stmt->fetch() )
	{
		echo "{$id}-----{$a}----{$b}<br />";
	}
}
//echo "影響了".$stmt->affected_rows."行記錄!";
</span>
<span style="font-size:14px;">........</span>
<span style="font-size:14px;">......</span>
<span style="font-size:14px;">$stmt -> free_result();//釋放掉整個結果集合,緩衝區裏面的數據
$mysqli -> close(); //關閉了整個mysqli的擴展
</span>
對數據庫內存的釋放很重要!








發佈了23 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章