Исключение IlluminateDatabase QueryException: SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1064

#php #mysql #sql #database #laravel

#php #mysql #sql #База данных #ларавель

Вопрос:

я пытаюсь добавить этот запрос в свой код в 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 для правильного синтаксиса для использования рядом с ‘выберите o. * из
o

ПРИМЕЧАНИЕ:

  • Попробовал ‘strict’ -> false
  • Использование DB::select();
  • DB::unrepared() единственное, что не возвращает никакой ошибки, но и не возвращает результат, только a (TRUE)

Редактировать

когда я удаляю последнее сообщение, я получаю это :

SQLSTATE[HY000]: Общая ошибка: 2014 не может выполнять запросы, пока активны другие небуферизованные запросы. Рассмотрите возможность использования PDOStatement::fetchAll() . В качестве альтернативы, если ваш код будет выполняться только с mysql, вы можете включить буферизацию запросов, установив атрибут PDO ::MYSQL_ATTR_USE_BUFFERED_QUERY .

Комментарии:

1. Как вы добавляете этот запрос в laravel? можете предоставить код?

2. @PrashantDeshmukh ….. использование DB::select($query);

3. Затем проверьте, правильно ли вы заключаете запрос в кавычки.

4. @PrashantDeshmukh ….. я проверил, я даже принял запрос, предоставленный исключением, и он сработал в командной строке phpmyadmin / mysql

5. Пожалуйста, отправьте вам laravel-код DB::select.

Ответ №1:

может быть, вы env не разрешаете несколько запросов в одном операторе, поэтому из-за того, что ваша временная таблица, похоже, не обновляется, попробуйте использовать динамический запрос вместо создать временную таблицу

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

Комментарии:

1. Спасибо, что это работает! но как я могу исправить свой env, чтобы разрешить несколько запросов в будущем?

2. вы должны проверить версию dbdriver, а также проверить, разрешает ли laravel эту функцию