首頁 >資料庫 >mysql教程 >如何在準備好的 PDO 語句中安全地使用 ORDER BY?

如何在準備好的 PDO 語句中安全地使用 ORDER BY?

Susan Sarandon
Susan Sarandon原創
2024-12-09 03:12:09165瀏覽

How Can I Securely Use ORDER BY in Prepared PDO Statements?

在準備好的PDO 語句中設定ORDER BY 參數

嘗試使用已準備好的PDO 在SQL 查詢的ORDER BY 部分使用參數時語句,重要的是要注意PDO 不支援直接綁定列名或排序方向作為參數。當未應用所需的排序順序時,這可能會導致混亂。

要解決此問題,您必須將ORDER BY 子句直接插入SQL 查詢中,如下例所示:

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");

轉義注意事項

確保ORDER 中的每個運算符和標識符都至關重要BY 子句被硬編碼在腳本中以防止安全漏洞。切勿將使用者提供的輸入直接插入 ORDER BY 子句中。

白名單輔助函數

要簡化驗證和白名單過程,您可以建立一個輔助函數:

function white_list($value, $allowed, $error) {
  if (in_array($value, $allowed)) {
    return $value;
  } else {
    throw new Exception($error);
  }
}

此函數根據允許的選項清單檢查該值,如果該值會引發錯誤無效。

用法

使用白名單輔助函數,您可以為ORDER BY 子句建立安全的預備語句:

$order = white_list($order, ["name","price","qty"], "Invalid field name");
$direction = white_list($direction, ["ASC","DESC"], "Invalid ORDER BY direction");

$sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";
$stmt = $db->prepare($sql);
$stmt->execute([$is_live]);

透過遵循這些準則,您可以在準備好的PDO 語句中正確設定ORDER BY 參數,同時保持安全性。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn