【问题标题】:Laravel DB::select syntax error or access violation error (works as native query)Laravel DB::select 语法错误或访问冲突错误(用作本机查询)
【发布时间】:2021-01-04 02:22:36
【问题描述】:

使用 Laravel DB 外观尝试执行以下查询:

    $sql = "
        SELECT P.*, PTR.score
        FROM reviews R, products_to_reviews PTR, j_products P
        WHERE R.id = ? AND PTR.review_id = R.id AND P.id = PTR.product_id
        ORDER BY ? ?
        LIMIT ?
    ";

    $data = \DB::select($sql,[$reviewID,$orderBy,$orderByDirection,$take]);

我收到以下错误消息:

照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。 在第 4 行限制 3'(SQL: SELECT P.*, PTR.score FROM 评论 R, products_to_reviews PTR, j_products P 其中 R.id = 1 AND PTR.review_id = R.id AND P.id = PTR.product_id ORDER BY PTR.score desc 限制 3 )

但是,当直接对数据库执行时,错误中的 sql 代码会作为本机查询。

编辑: 我已将其缩小到按方向部分的顺序。如果我改变:

ORDER BY ? ?

ORDER BY ? DESC

sql语句执行没有任何错误。

【问题讨论】:

    标签: mysql laravel laravel-8


    【解决方案1】:

    为什么使用DB::raw()

    试试$data = \DB::select($sql,[$reviewID,$orderBy,$orderByDirection,$take]);

    【讨论】:

    • 我最初没有使用 DB::raw(),但添加它希望它能解决问题。即使没有它,我也会收到相同的错误消息。
    • @ErikT 这是一个语法错误,按两列排序需要用, 拆分,如下所示:ORDER BY ?, ? LIMIT ?
    • 第二个问号 (?) 在:ORDER BY ? ?用于确定方向,因此前面不应有逗号。供参考:dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html
    猜你喜欢
    • 2019-02-04
    • 2017-04-16
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2019-06-06
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多