通过
命名参数绑定的Laravel原始SQL查询命名参数绑定“order by”在此完整原始语句上不起作用。不显示错误消息。开始和长度的工作。通过
$sql = "SELECT product.id AS 'product-id',
product.name AS 'product-name',
product.status AS 'product-status',
product.ingredients 'product-ingredients',
product.price AS 'product-price',
category.name AS 'category-name'
FROM
product
LEFT JOIN
category ON product.category_id = category.id
ORDER BY :orderBy
LIMIT :start,:length";
return DB::select($sql, [
'orderBy' => $orderBy,
'start' => $start,
'length' => $length
]);
有什么想法吗?
回答:
问题出在底层的PDO语句中。您不能像绑定值那样在查询中绑定表名或列名。看到这个答案:
Can PHP PDO Statements accept the table or column name as parameter?
你可以重写查询,而不生表达式:
return DB::table('product') ->select([
product.id AS 'product-id',
...
])->leftJoin('category', 'product.category_id', '=', 'category.id')
->orderBy($orderBy)
->limit($start, $length)
如果必须使用原始表达式,你将不得不手动值消毒顺序并将其插入到查询为一个字符串。
以上是 通过 的全部内容, 来源链接: utcz.com/qa/259015.html