簡體   English   中英

mysqli編寫語句,如何循環結果集

[英]mysqli prepared statement , how to loop the result set

我正在研究有關mysqli准備好的陳述,我有兩個問題。

在我閱讀時,我發現准備好的語句的執行順序如下所示:

$sql = 'SELECT image_id, filename, caption FROM images WHERE image_id = ?';

// connect to the database
$conn = ....

$stmt = $conn->stmt_init();

$stmt->prepare($sql);

$stmt->bind_param('i', $id);

$stmt->execute();

$stmt->bind_result($image_id, $filename, $caption);

// optional: get total of records in the result set
$stmt->store_result();
$numRows = $stmt->num_rows;

// loop through the result set
while ($stmt->fetch()) {
    // code goes here...
}

or 

// fetch the result for one record
$stmt->fetch()

// free & close
$stmt->free_result();
$stmt->close;

$conn->close();

這是我的第一個問題:

在我閱讀時,它還提到了以下內容:

如果未將結果綁定到變量,請使用$ row = $ stmt-> fetch(),並將每個變量作為$ row ['column_name']訪問。 所以,

使用2種方法中的任何一種循環結果集是否有任何優缺點? 如果沒有區別,那么為什么首先要使用$ stmt-> bind_result來綁定結果呢? 如果我可以使用$ row = $ stmt-> fetch()代替什么呢?

這是我的另一個問題:

  • $ stmt-> free_result(); 什么准確地解放了? prepare()或store_result()還是其他?
  • $ stmt->關閉; 我到底在做什么? stmt_init()或prepare()還是其他?

希望你的答案能讓我理解更准備好的陳述,這樣我才能建立安全的東西......

謝謝

  • $ stmt-> free_result()幾乎與名稱相同:它釋放與結果相關的內存。

  • $ stmt-> close關閉語句句柄(實際是光標),使得無法循環遍歷結果集(再次)。

雖然手冊指出:“你應該總是用mysqli_free_result()釋放你的結果,當你的結果對象不再需要時”,通常的做法是不要使用free_result並關閉語句。 關閉時,你不能再使用結果集,或者重用它,當php死掉時,無論如何都要釋放內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM