PHP for MySQL 中的安全預備語句
使用MySQL 和PHP 時,使用預先準備語句對於確保資料庫的安全至關重要查詢。準備好的語句透過將 SQL 語句與使用者提供的輸入分開來防禦 SQL 注入攻擊。
建立安全的準備語句
要建立安全的準備語句,我們'將使用以下程式碼片段:
$db = new mysqli("host", "user", "pw", "database"); $stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC"); $stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
解釋程式碼
檢索資料
準備好語句後,您可以執行它、檢索資料並迭代結果:
$stmt->execute(); $stmt->store_result(); $stmt->bind_result($column1, $column2, $column3); while ($stmt->fetch()) { echo "col1=$column1, col2=$column2, col3=$column3 \n"; }
關聯數組方便
要將資料作為關聯數組檢索(例如,對於 SELECT *查詢),您可以使用以下函數:
function stmt_bind_assoc(&$stmt, &$out) { $data = mysqli_stmt_result_metadata($stmt); $fields = array(); $out = array(); $fields[0] = $stmt; $count = 1; while ($field = mysqli_fetch_field($data)) { $fields[$count] = &$out[$field->name]; $count++; } call_user_func_array(mysqli_stmt_bind_result, $fields); }
此函數允許您將結果綁定到關聯數組,使您可以更輕鬆地使用code:
$stmt->store_result(); $resultrow = array(); stmt_bind_assoc($stmt, $resultrow); while ($stmt->fetch()) { print_r($resultrow); }
效能注意事項
雖然準備好的語句旨在提高效能,但在頁面上使用幾次可能不會產生顯著的效益。但是,如果您的應用程式經常執行資料庫操作,準備語句可以顯著縮短回應時間。
以上是如何安全地使用 PHP 中的預先準備語句來查詢 MySQL 資料庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!