在生成網頁時,許多PHP腳本通常都會執行除參數以外,其他部分完全相同的查詢語句,針對這種重復執行一個查詢,每次迭代使用不同的參數情況,MySQL從4.1版本開始提供了一種名為預處理語句(prepared statement)的機制。它可以將整個命令向MySQL服務器發送一次,以后只有參數發生變化,MySQL服務器只需對命令的結構做一次分析就夠了。這不僅大大減少了需要傳輸的數據量,還提高了命令的處理效率。可以用mysqli擴展模式中提供的mysqli_stmt類的對象,去定義和執行參數化的SQL命令,mysqli_result類中包含的全部成員屬性和成員方法如表13-6和表13-7所示。
表13-6 mysqli_stmt類中的成員方法(共12個)
成員方法名 |
描 述 |
bind_param() |
該方法把預處理語句各有關參數綁定到一些 PHP變量上,注意參數的先后順序 |
bind_result() |
預處理語句執行查詢之后,利用該方法將變量綁定到所獲取的字段 |
close() |
一旦預處理語句使用結果之后,它所占用的資源可以通過該方法回收 |
data_seek() |
在預處理語句中移動內部結果的指針 |
execute() |
執行准備好的預處理語句 |
fetch() |
獲取預處理語句結果的每條記錄,並將相應的字段賦給綁定結果 |
free_result() |
回收由該對象指定的語句占用的內存 |
result_metadata() |
從預處理中返回結果集原數據 |
prepare() |
無論是綁定參數還是綁定結果,都需要使用 該方法准備要執行的預處理語句 |
send_long_data() |
發送數據塊 |
reset() |
重新設置預處理語句 |
store_result() |
從預處理語句中獲取結果集 |
表13-7 mysqli_stmt類中的成員屬性(共6個)
成員屬性名 |
描 述 |
$affected_rows |
返回該對象指定的最后一條語句所影響的記錄數。 注意,該方法只與插入、修改和刪除三種查詢句有關 |
$errno |
返回該對象指定最近所執行語句的錯誤代碼 |
$error |
返回該對象指定最近所執行語句的錯誤描述字符串 |
$param_count |
返回給定的預處理語句中需要綁定的參數個數 |
$sqlstate |
從先前的預處理語句中返回SQL狀態錯誤代碼 |
$num_rows |
返回stmt對象指定的SELECT語句獲取的記錄數 |
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }