首頁 > 資料庫 > mysql教程 > 如何安全地使用 PHP 中的預先準備語句來查詢 MySQL 資料庫?

如何安全地使用 PHP 中的預先準備語句來查詢 MySQL 資料庫?

Barbara Streisand
發布: 2024-12-16 10:46:12
原創
799 人瀏覽過

How Can I Securely Use Prepared Statements in PHP to Query a MySQL Database?

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']));
登入後複製

解釋程式碼

  1. 建立連線:使用mysqli類別建立MySQL連線物件($db)。
  2. 準備語句: 使用連線物件上的prepare()方法來準備SQL語句。佔位符(?)代表稍後將被使用者輸入替換的參數。
  3. 綁定參數:使用bind_param()方法綁定使用者提供的參數(在本例中為$_GET ['userid'] 和$_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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板