PDO 准备语句:设置 ORDER BY 参数
使用准备好的 PDO 语句时,尝试在语句中使用参数时可能会遇到困难ORDER BY 子句。虽然该语句执行时不会出错,但可能不会返回任何结果。
要解决此问题,需要将 ORDER BY 参数直接插入 SQL 语句中,如以下代码所示:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
确保每个运算符和标识符都是硬编码而不是动态生成的至关重要。这种方法有助于防止注入攻击。
增强代码安全性的另一种方法是使用白名单辅助函数,如下所示:
function white_list($value, $allowed_values, $error_message) { if (!in_array($value, $allowed_values)) { throw new Exception($error_message); } else { return $value; } }
通过使用此函数,您可以检查输入的值是否存在于预定义的有效值列表中,如果不存在则引发错误。
利用这种方法,您准备好的语句将既安全又能够正确处理 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 参数?的详细内容。更多信息请关注PHP中文网其他相关文章!