【问题标题】:Illuminate\Database\QueryException: SQLSTATE[42000]: Syntax error or access violation: 1064Illuminate\Database\QueryException: SQLSTATE[42000]: 语法错误或访问冲突:1064
【发布时间】:2023-04-10 00:46:02
【问题描述】:

我正在尝试将此查询添加到我在 laravel 中的代码中。 它可以在 phpmyadmin 或 mysql 命令行中顺利运行,但可以得到除此语法错误之外的任何内容。

我的查询:

$query_sql=" CREATE TEMPORARY TABLE F as( 
                        SELECT * from (
                            select M.* ,M2.idA from (
                                        SELECT  o.id , o_n.id_n as idD from o ,o_n where FIND_WILD_IN_SET(o.id,o_n.id_o)
                                        and o_n.id_n IN ({$start_n_string})
                                    ) M  
                            JOIN ( SELECT  o.id , o_n.id_n as idA from o,o_n where FIND_WILD_IN_SET(o.id,o_n.id_o)
                                    and o_n.id_n IN ({$end_n_string})
                            ) M2 on M.id = M2.id GROUP by id
                        ) x
                    );


SELECT o.* from o
                where o.id IN ( 
                    select id_offre from o_rv join F on F.id = o_rv.id_offre 
                    where find_in_set(idD,o_rv.id_n]) < find_in_set(idA,os_rv.id_n)
                    )";
            
        $list_pot_r=DB::select($query_sql);

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 'select o.* from 附近使用正确的语法 o

注意:

  • 尝试了“严格”​​-> 错误
  • 使用 DB::select();
  • DB::unprepared() 唯一不返回任何错误但它不返回 返回结果既不是只有一个 (TRUE)

编辑

当我删除最后一条语句时,我得到了这个:

SQLSTATE[HY000]:一般错误:2014 无法执行查询,而 其他无缓冲查询处于活动状态。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只是 要针对 mysql 运行,您可以通过设置启用查询缓冲 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性。

【问题讨论】:

  • 你是如何在 laravel 中添加这个查询的?可以提供代码吗?
  • @PrashantDeshmukh..... 使用 DB::select($query);
  • 然后检查您是否在查询周围加上了正确的引号。
  • @PrashantDeshmukh .....我确实检查了我什至接受了提供的异常查询,它在 phpmyadmin / mysql 命令行中工作
  • 请贴出 DB::select 的 laravel 代码。

标签: php mysql sql database laravel


【解决方案1】:

可能是您的环境不允许在单个语句中进行多个查询,因此由于您的临时表似乎没有更新,请尝试使用动态查询而不是创建临时表

SELECT o.* 
from o
where o.id IN ( 
    select id_offre from o_rv 
    join (SELECT * from (
                    select M.* ,M2.idA from (
                                SELECT  o.id , o_n.id_n as idD from o ,o_n where FIND_WILD_IN_SET(o.id,o_n.id_o)
                                and o_n.id_n IN ({$start_n_string})
                            ) M  
                    JOIN ( SELECT  o.id , o_n.id_n as idA from o,o_n where FIND_WILD_IN_SET(o.id,o_n.id_o)
                            and o_n.id_n IN ({$end_n_string})
                    ) M2 on M.id = M2.id GROUP by id
                ) )  F on F.id = o_rv.id_offre 
    where find_in_set(idD,o_rv.id_n]) < find_in_set(idA,os_rv.id_n)
    )";
          

【讨论】:

  • 谢谢它的工作!但是我如何修复我的环境以允许将来进行多个查询?
  • 你应该检查 dbdriver 版本并检查 laravel 是否允许这个功能
猜你喜欢
  • 2018-12-24
  • 2019-03-14
  • 2015-10-12
  • 1970-01-01
  • 2022-01-25
  • 2017-10-29
  • 2014-01-14
  • 2013-12-02
相关资源
最近更新 更多