首頁 > 後端開發 > php教程 > 如何在 PHP 中使用準備好的語句從 MySQL 安全地檢索資料?

如何在 PHP 中使用準備好的語句從 MySQL 安全地檢索資料?

Susan Sarandon
發布: 2024-12-20 13:07:10
原創
388 人瀏覽過

How Can I Securely Retrieve Data from MySQL Using Prepared Statements in PHP?

在PHP 中保護MySQL 預準備語句

在PHP 中使用SQL 查詢時,透過使用預準備語句來優先考慮安全性至關重要。以下是如何建立安全的預先準備語句以使用 URL 參數的輸入來擷取欄位:

利用 MySQL 改進版(MySQLi):

$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";
}

$stmt->close();
登入後複製

或者,您可以使用此輔助函數來簡化關聯數組的綁定:

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

使用it:

$stmt->store_result();

$resultrow = array();
stmt_bind_assoc($stmt, $resultrow);

while ($stmt->fetch()) {
    print_r($resultrow);
}
登入後複製

效能增強

準備好的語句確實透過盡量減少重新解析和重新規劃查詢的需要來增強效能。但是,如果在單一頁面上僅使用幾次,對速度的影響可能並不顯著。儘管如此,它仍然是提高安全性和防止 SQL 注入漏洞的建議做法。

以上是如何在 PHP 中使用準備好的語句從 MySQL 安全地檢索資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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