使用mysqli存取數據

使用mysqli存取數據也包括面向對象和麪向過程兩種方式,在本節我們只討論如何使用面向對象的方式來與MySQL交互,關於mysqli擴展中使用面向過程方式這裏就不再詳細介紹了,有興趣的讀者可參考官方文檔來獲取相關的資料。
在mysqli中,執行查詢使用query()方法,該方法的語法格式如下:
  1. mixed query ( string $query [, int $resultmode ] ) 
在上述語法中涉及到的參數說明如下。
query:向服務器發送的SQL語句。
resultmode:該參數接受兩個值,一個是MYSQLI_STORE_RESULT,表示結果作爲緩衝集合返回;另一個是MYSQLI_USE_RESULT,表示結果作爲非緩衝集合返回。
下面是使用query()方法執行查詢的例子:
代碼23-28  光盤\codes\第23章\23.5\query.php
  1. <?php  
  2. $mysqli=new mysqli("localhost","root","root","sunyang");      
  3. //實例化mysqli  
  4. $query="select * from employee";  
  5. $result=$mysqli->query($query);  
  6. if ($result) {  
  7.     if($result->num_rows>0){                          
  8.     //判斷結果集中行的數目是否大於0  
  9.         while($row =$result->fetch_array() ){             
  10.         //循環輸出結果集中的記錄  
  11.             echo ($row[0])."<br>";  
  12.             echo ($row[1])."<br>";  
  13.             echo ($row[2])."<br>";  
  14.             echo ($row[3])."<br>";  
  15.             echo "<hr>";  
  16.         }  
  17.     }  
  18. }else {  
  19.     echo "查詢失敗";  
  20. }  
  21. $result->free();  
  22. $mysqli->close();  
  23. ?> 
在上面代碼中,num_rows爲結果集的一個屬性,返回結果集中行的數目。方法fetch_array()將結果集中的記錄放入一個數組中並將其返回。最後使用free()方法將結果集中的內存釋放,使用close()方法將數據庫連接關閉。上面代碼的輸出結果如圖23-24所示。
 
圖23-24  使用query()方法的查詢結果
對於刪除記錄(delete)、保存記錄(insert)和修改記錄(update)的操作,也是使用query()方法來執行的,下面是刪除記錄的例子:
代碼23-29  光盤\codes\第23章\23.5\querydelete.php
  1. <?php  
  2. $mysqli=new mysqli("localhost","root","root","sunyang");          
  3. //實例化mysqli  
  4. $query="delete from employee where emp_id=2";  
  5. $result=$mysqli->query($query);  
  6. if ($result){  
  7.     echo "刪除操作執行成功";  
  8. }else {  
  9.     echo "刪除操作執行失敗";  
  10. }  
  11. $mysqli->close();  
  12. ?> 
保存記錄(insert)、修改記錄(update)的操作與刪除記錄(delete)的操作類似,將SQL語句進行相應的修改即可。
預準備語句
使用預準備語句可提高重複使用語句的性能,在PHP中,使用prepare()方法來進行預準備語句查詢,使用execute()方法來執行預準備語句。PHP有兩種預準備語句:一種是綁定結果,另一種是綁定參數。
1.綁定結果
所謂綁定結果就是把PHP腳本中的自定義變量綁定到結果集中的相應字段上,這些變量就代表着所查詢的記錄,綁定結果的示例代碼如下:
代碼23-30  光盤\codes\第23章\23.5\bandResult.php
  1. <?php  
  2. $mysqli=new mysqli("localhost","root","root","sunyang");      
  3. //實例化mysqli  
  4. $query="select * from employee";  
  5. $result=$mysqli->prepare($query);                 
  6. //進行預準備語句查詢  
  7. $result->execute();                           
  8. //執行預準備語句  
  9. $result->bind_result($id,$number,$name,$age);         
  10. //綁定結果  
  11. while ($result->fetch()) {  
  12.     echo $id;  
  13.     echo $number;  
  14.     echo $name;  
  15.     echo $age;  
  16. }  
  17. $result->close();                             
  18. //關閉預準備語句  
  19. $mysqli->close();                             
  20. //關閉連接  
  21. ?> 
在綁定結果的時候,腳本中的變量要與結果集中的字段一一對應,綁定完以後,通過fetch()方法將綁定在結果集中的變量一一取出來,最後將預準備語句和數據庫連接分別關閉。
2.綁定參數
所謂綁定參數就是把PHP腳本中的自定義變量綁定到SQL語句中的參數(參數使用 "?"代替)上,綁定參數使用bind_param()方法,該方法的語法格式如下:
  1. bool bind_param ( string $types , mixed &$var1 [, mixed &$... ] ) 
在上述語法中涉及到的參數說明如下。
types:綁定的變量的數據類型,它接受的字符種類包括4個,如表23-1所示。
表23-1  字符描述
字符種類

代表的數據類型

I

integer

D

double

S

string

B

blob

參數types接受的字符的種類和綁定的變量需要一一對應。
var1:綁定的變量,其數量必須要與SQL語句中的參數數量保持一致。
綁定參數的示例代碼如下:
代碼23-31  光盤\codes\第23章\23.5\bandParam.php
  1. <?php  
  2. $mysqli=new mysqli("localhost","root","root","sunyang");          
  3. //實例化mysqli  
  4. $query="insert into employee (emp_number,emp_name,emp_age)   
  5. values (?,?,?)";  
  6. $result=$mysqli->prepare($query);  
  7. $result->bind_param("ssi",$number,$name,$age);            
  8. //綁定參數  
  9. $number='sy0807';  
  10. $name='employee7';  
  11. $age=20;  
  12. $result->execute();                               
  13. //執行預準備語句  
  14. $result->close();  
  15. $mysqli->close();  
  16. ?> 
在一個腳本中還可以同時綁定參數和綁定結果,示例代碼如下:
代碼23-32  光盤\codes\第23章\23.5\bandParamResult.php
  1. <?php  
  2. $mysqli=new mysqli("localhost","root","root","sunyang");      
  3. //實例化mysqli  
  4. $query="select * from employee where emp_id < ?";  
  5. $result=$mysqli->prepare($query);  
  6. $result->bind_param("i",$emp_id);                 
  7. //綁定參數  
  8. $emp_id=4;  
  9. $result->execute();  
  10. $result->bind_result($id,$number,$name,$age);         
  11. //綁定結果  
  12. while ($result->fetch()) {  
  13.     echo $id."<br>";  
  14.     echo $number."<br>";  
  15.     echo $name."<br>";  
  16.     echo $age."<br>";  
  17. }  
  18. $result->close();  
  19. $mysqli->close();  
  20. ?> 
多個查詢
mysqli擴展提供了能連續執行多個查詢的multi_query()方法,該方法的語法格式如下:
  1. bool mysqli_multi_query ( mysqli $link , string $query ) 
在執行多個查詢時,除了最後一個查詢語句,每個查詢語句之間要用";"分開。執行多個查詢的示例代碼如下:
代碼23-33  光盤\codes\第23章\23.5\multi_query.php
  1. $mysqli=new mysqli("localhost","root","root","sunyang");          
  2. //實例化mysqli  
  3. $query = "select emp_name from employee ;";  
  4. $query .= "select dep_name from depment ";  
  5. if ($mysqli->multi_query($query)) {                   
  6. //執行多個查詢  
  7.     do {  
  8.         if ($result = $mysqli->store_result()) {  
  9.             while ($row = $result->fetch_row()) {  
  10.                 echo $row[0];  
  11.                 echo "<br>";  
  12.             }  
  13.             $result->close();  
  14.         }  
  15.         if ($mysqli->more_results()) {  
  16.             echo ("-----------------<br>");           
  17.             //連個查詢之間的分割線  
  18.         }  
  19.     } while ($mysqli->next_result());  
  20. }  
  21. $mysqli->close();//關閉連接  
  22. ?> 
在上述代碼中,store_result()方法用於獲得一個緩衝結果集; fetch_row()方法的作用類似於fetch_array()方法;more_results()方法用於從一個多查詢中檢查是否還有更多的查詢結果;next_result()方法用於從一個多查詢中準備下一個查詢結果。程序的輸出結果如圖23-25所示。
 
圖23-25  執行多個查詢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章