繁体   English   中英

Illuminate\Database\QueryException: SQLSTATE[42000]: 语法错误或访问冲突:1064

[英]Illuminate\Database\QueryException: SQLSTATE[42000]: Syntax error or access violation: 1064

我试图将此查询添加到我在 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 附近使用的正确语法

笔记:

  • 试过'严格'-> false
  • 使用 DB::select();
  • DB::unprepared() 唯一不返回任何错误但不返回结果的唯一一个 (TRUE)

编辑

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

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

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

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)
    )";
          

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM