gpt4 book ai didi

php - 使用准备好的语句进行 ORDER BY

转载 作者:行者123 更新时间:2023-11-29 12:04:39 25 4
gpt4 key购买 nike

我目前正在编写一个脚本,可以根据用户输入对数据库表进行排序。

因此,用户可以选择一列(通过选择框),然后整个 mysql 表应该按照选择框值的顺序显示。

我当前的代码($order 是用户输入的)

抱歉,我使用的是移动设备:/

$order = "user_id"; //user input

$sql = $db->prepare("SELECT user_id, username, realname, auth_lvl, usercolor, activated, ban FROM users ORDER BY ?");

$sql->bind_param('s', $order);
$sql->execute();
$sql->bind_result($id, $username, $realname, $auth_lvl, $usercolor, $activated, $ban);
$sql->store_result();

while ($sql->fetch()) {
//echo...
}

问题

无论 $order (ORDER BY 部分)是什么,我总是得到这样的 ID 顺序:3, 4, 5, 30, 29

最佳答案

如果输入参数是'foo',那么你的SQL相当于

SELECT user_id, username, realname, auth_lvl, usercolor, activated, ban 
FROM users
ORDER BY 'foo'

这当然意味着行可以按任何顺序排列。您不能对 order by 子句和表名称等内容使用参数。在这种情况下,您实际上需要将列的值作为字符串的前缀。

$q = 'SELECT user_id, username, realname, auth_lvl, usercolor, activated, ban FROM users ORDER BY ' . $order;

这显然容易出现 SQL 注入(inject),因此需要手动确保列名有效:

$valid_col = in_array($order, ['username', 'realname', ...], true);

然后仅在结果为 true 时才执行查询。

关于php - 使用准备好的语句进行 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735206/

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