#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 эту функцию