<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文僅供學習與參考,內容關於 PHP 中 mysqli_stmt::fetch 的使用準備工作</span></span><span>
</span><span><span class="hljs-comment">// -------------------------------------------</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<h1>在執行 mysqli_stmt::</span><span><span class="hljs-variable constant_">fetch</span></span><span> 前需要做哪些準備工作才能保證順利?</h1>
<p>在使用 <code>mysqli_stmt::</span><span><span class="hljs-variable constant_">fetch</span></span><span>使用prepare()方法準備一條SQL 查詢語句,通常包含佔位符( ? )以防止SQL 注入:
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT name, email FROM users WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"預處理失敗: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error);
}
如果查詢語句中包含了?佔位符,就需要使用bind_param()將用戶輸入綁定到語句中:
</span><span><span class="hljs-variable">$userId</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$userId</span></span><span>); </span><span><span class="hljs-comment">// "i" 表示整數類型</span></span><span>
通過execute()方法執行SQL 語句:
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"執行失敗: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>->error);
}
在調用fetch()之前,必須先通過bind_result()方法綁定結果集的列到PHP 變量:
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_result</span></span><span>(</span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>);
現在可以使用fetch()獲取一行數據,並自動將結果填充到之前綁定的變量中:
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"姓名: <span class="hljs-subst">$name</span></span></span><span>, 郵箱: </span><span><span class="hljs-subst">$email</span></span><span><br>";
}
最後,關閉語句與連接:
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
在調用mysqli_stmt::fetch之前的準備步驟包括:創建連接、準備語句、綁定輸入參數、執行語句、綁定結果變量。每一個步驟都至關重要,缺一不可,確保這些準備工作完成後, fetch()才能順利返回結果。
相關標籤:
mysqli_stmt