gpt4 book ai didi

php - 如何使用准备好的 PDO 语句设置 ORDER BY 参数?

转载 作者:行者123 更新时间:2023-11-29 19:40:45 27 4
gpt4 key购买 nike

我在使用 SQL 的 ORDER BY 部分中的参数时遇到问题。它不发出任何警告,但不打印任何内容。

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

$stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction");
$stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR);
$stmt->bindParam(':order', $order, PDO::PARAM_STR);
$stmt->bindParam(':direction', $direction, PDO::PARAM_STR);
$stmt->execute();

:my_param 有效,但 :order:direction 无效。是不是没有正确地进行内部转义?我是否直接将其插入 SQL 中?就像这样:

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

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

是否有 PDO::PARAM_COLUMN_NAME 常量或等效值?

谢谢!

最佳答案

是的,您只能将其直接插入 SQL 中。当然,要采取一些预防措施。 每个运算符/标识符都必须在脚本中进行硬编码,如下所示:

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

方向相同。

我写了一个whitelisting helper function在这种情况下使用,可以大大减少需要编写的代码量:

$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]);

这里的想法是检查值并在不正确的情况下引发错误。

关于php - 如何使用准备好的 PDO 语句设置 ORDER BY 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41370237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com