私はmysqliのプリペアドステートメントについて調査していましたが、2つの質問があります。
読んでいると、プリペアドステートメントの実行順序は次のようになっていることがわかります。
$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-> close; 私は正確に何を閉じていますか?stmt_init()またはprepare()またはそれ以外?
うまくいけば、あなたの答えが私にもっとよく準備されたステートメントを理解させて、私が安全な何かを構築できるようになるでしょう...
ありがとう