使用准备好的 PDO 语句设置 ORDER BY 参数
使用准备好的 PDO 语句执行 SQL 查询时,尝试设置时可能会出现困难ORDER BY 子句中的参数。本文通过探讨限制并提供替代解决方案来解决此问题。
直接 SQL 插入
虽然在 WHERE 子句中使用参数是有效的,但将它们应用于 ORDER BY 条款被证明是有问题的。要绕过此限制,需要直接插入 SQL 查询。然而,这种方法需要严格的预防措施来确保查询的安全性和完整性,如下所示:
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT * from table WHERE column = :my_param ORDER BY $order $direction";
硬编码运算符和标识符
每个运算符和标识符ORDER BY 子句中的内容必须在脚本中进行硬编码,如下所示:
$orders = array("name", "price", "qty"); $key = array_search($_GET['sort'], $orders); $order = $orders[$key]; $query = "SELECT * from table WHERE is_live = :is_live ORDER BY $order";
The同样的原则也适用于方向。
白名单辅助函数
为了最大限度地减少所需的代码量,可以使用白名单辅助函数:
$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";
此函数检查值,如果无效则触发错误。该技术确保了数据的有效性和安全性。
以上是如何在 PDO 中安全地使用带有 ORDER BY 子句参数的准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!