MYSQLI:mysqli預處理語句


應用環境 mysqli預處理功能(大量數據處理時使用)
步驟  
a)mysqli連接數據庫 $conn= new mysqli('localhost','root','123456','apple');
b)設置編碼 $conn->set_charset('utf8');
c)發送query語句

使用$conn->prepare($sql)這個方法表示是預處理,如果涉及到取值,必須指定查詢字段

$sql = "select * from product_info where product_id=?";

$stmt = $conn->prepare($sql);

d)提供條件

比如上句用了?作為不確定的值,就需要指定

$stmt->bind_param('i',$product_id);        用變量綁定?表示的值,i表示整型,d表示浮點型,b代表二進制,s代表其它的所有

$product_id=$_GET['product_id'];           指定變量的值

 

e)綁定結果格式並執行

$stmt->bind_result($product_id,$product_info,$product_trans,$product_price);   綁定結果格式

$stmt->execute();                發送變量,此時服務器的語句已經完整了

 f)從sql服務器中取回結果  

預處理語句會將結果集保存在sql開辟的內存中,php開辟的內存無法直接使用(count是php函數,不是sql函數,無法直接與sql內存交互),默認情況是每次執行fetch()會從sql內存中取出一行,但是不使用store_result()就無法獲取行數.當然如果你的結果只有一行,可以無視這一句.請記住:在mysqli預處理中取出數據,只能使用fetch()這是因為mysqli_stmt類並沒有其它取值方法

$stmt->store_result();     //如果用變量接收的話,會發現成功了顯示1,否則顯示0(所以用變量接受的值並不是結果集)

 g)獲取結果集行數  $count = $stmt->num_rows();
 h)輸出結果
while($field=$result->fetch_field()){
echo $field->name."--"; //輸出數據庫字段信息
}
while($stmt->fetch()){
echo "$product_id--$product_info--$product_trans--$product_price"; //輸出取出數據信息
}

前面說了,既然要取值,當然前面query指定了查詢字段,上句的變量用上了
 i)關閉mysqli鏈接  
$conn->close();
   

!!!!!!!!非常重要,如果一個php塊中需要進行多次mysqli預處理語句,在前一個預處理結束后,必須要關閉前一個預處理,才能綁定后一個預處理語句,非常重要!!!否則報錯:Fatal error: Call to a member function bind_param() on boolean

原因:mysqli是一個持久連接,需要手動關閉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM