學習筆記:mysqli預處理和事務處理


 

 

1

應用環境

 

 

 

mysqli預處理功能(大量數據處理時使用)

2

步驟

 

 

a)mysqli連接數據庫

$mysqli = new mysqli('localhost','root','root','chuanzhi');

 

b)設置編碼

$mysqli->set_charset('gb2312');

 

c)發送query語句

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

$query = "select id,proName,proClass,proPrice from product where id>?";

$stmt = $mysqli->prepare($query);

 

d)提供條件

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

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

$id='1';                                指定變量的值

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

 

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

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

$stmt->store_result();//如果用變量接收的話,會發現成功了顯示1,否則顯示0

 

f)獲取結果集行數

$count = $stmt->num_rows();

 

g)綁定結果集需要輸出的字段

$stmt->bind_result($id,$proName,$proClass,$proPrice);        名字無所謂,反正按順序對應query的字段,變量個數要和query字段個數一致

 

h)輸出結果

前面說了,既然要取值,當然前面query指定了查詢字段,上句的變量用上了

 

i)

你懂的,關閉mysqli鏈接

 

事務處理

1

應用環境

 

 

 

對於安全比較在意的時候使用

2

步驟

 

 

 

MYSQL中只有INNODB和BDB類型的數據表才能支持事務處理!其他的類型是不支持的!

 

a)連接數據庫和設置編碼

不用說,當然是連接數據庫和設置編碼了,mysql和mysqli都支持事務處理

 

b)關閉自動提交

$mysqli->autocommit(false);在sql的客戶端里面用set autocommit = 0;

 

c)開啟事務

開啟一個事務start transation(mysql中才有這一句,mysqli不需要這一句);

 

d)執行sql語句

 

 

e)判斷執行結果是否是自己想要的

如果是,就提交$mysqli->commit();

否則,回滾$mysqli->rollback();

 

f)開啟自動提交

$mysqli->autocommit(true);        //個人認為這句並不是必須的,因為頁面執行完,會回到初始狀態,也就是自動提交狀態

 

g)關閉數據庫連接

$mysqli->close();

 

 

 

原創作品,請勿轉載,如確需轉載請保持文章完整並注明出處,謝謝合作。

(許坤,php工程師,PHP工程師,互聯網研發工程師,軟件工程師)

原文地址:http://www.cnblogs.com/quinnxu/archive/2012/07/18/2597306.html


免責聲明!

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



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