只要我不使用 $sort 作为传入参数,我就无法弄清楚为什么排序会起作用。下面的示例将用于排序:
$sort = "quantity desc";
$sql = " with items as (
SELECT i.[item_id]
,i.[name]
,i.[value]
,i.[quantity]
,i.[available]
,isnull(r.awarded, 0) as awarded
, ROW_NUMBER() OVER(
ORDER BY $sort
) rowNumber
FROM [Intranet].[dbo].[Goodwell_Item] i
LEFT JOIN (
SELECT r.item_id
, COUNT(1) awarded
from [Intranet].[dbo].[Goodwell_Reward] r
group by r.item_id
) as r
ON i.item_id = r.item_id
)
SELECT *
FROM items
WHERE rowNumber BETWEEN (?) and (?)
and ( (?) = '' OR (available = (?)))
";
$params = array( $pagify['startFrom'], $end, $available, $available );
$stmt = sqlsrv_query( $conn, $sql, $params );
但是,如果我将使用 ORDER BY 的行更改为:
ORDER BY (?)
并将其添加到我的 $params 中,如下所示:
$params = array($sort, $pagify['startFrom'], $end, $available, $available );
然后由于某种原因排序被忽略。
请告诉我如何让排序以不允许 SQL 注入的方式工作。