我是pdo的新手,所以可能有些微妙的细微差别,我不知道。但是我有一个查询应该是按日期asc列出司机。代码的工作方式是正确的,当我在工作台上测试时,asc,所以我知道测试表数据是可靠的;但是当我在pdo中运行下面的代码时,它不会显示任何错误并返回记录,但是我看到的是descorder的结果,而不是预期的asc。代码如下:
$selectsql = "SELECT driverid, busid, firstname
FROM drivers
WHERE active= 1
AND day= 1
ORDER BY ? ASC
LIMIT ? ";
$results = $pdo->prepare($selectsql);
$results->execute([$list_date,$count]);
$row = $results->fetchAll();
我没有得到错误和数据返回。只是不符合预期。我做了检查,两个变量$list\u date和$count设置正确。
有人看到了吗?
更新
我发现它是按主索引driversid排序的。我不知道为什么。
2条答案
按热度按时间flmtquvp1#
我认为不能使用字段名作为准备语句的参数。您可以将代码更改为以下内容:
gkn4icbw2#
您是按常量表达式排序,而不是按列排序,因此排序顺序基本上是任意的(甚至不是随机的)。
如果要将代码注入到sql语句(例如列名)中,则需要使用好的旧字符串操作函数。准备好的报表是为了避免:
确保
$list_date
是您完全控制的有效sql,而不是外部输入。