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