渡されたパラメーターとして$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 );
ただし、ORDERBYの行を次のように変更すると次のようになります。
ORDER BY (?)
そしてそれを私の$paramsに次のように追加します:
$params = array($sort, $pagify['startFrom'], $end, $available, $available );
その後、何らかの理由でソートが無視されます。
SQLインジェクションを許可しない方法でソートを機能させる方法を教えてください。