Переменная в SQL не работает с оператором подготовки

Я создал небольшой оператор sql и протестировал его на phpmyadmin, и он отлично работает, но когда я пытаюсь вызвать его из php, он возвращает false

$stmt = $con->prepare('
    SELECT 
       @newId := COALESCE( MAX( OrderNumber ) , 0 ) +1 
    FROM 
      GSM_Parent;
    INSERT INTO 
      GSM_Parent (OrderNumber)  
    VALUES ( (select @newId)) ');

Здесь $stmt ложно.

Работают ли эти типы операторов sql с подготовленными операторами или мне нужно использовать обычные вызовы mysqli?

prepare не поддерживает несколько утверждений.
Jonnix 11.03.2019 14:28

почему у вас есть 2 запроса на операторе подготовки?

Vidal 11.03.2019 14:28

Спасибо за ответ, мне нужен этот тип запроса, и из-за этого у меня есть 2

worker 11.03.2019 14:29

Вам нужно будет выполнить 2 разных запроса.

Vidal 11.03.2019 14:30

INSERT INTO GSM_Parent (OrderNumber) SELECT ...?

jarlh 11.03.2019 14:31

Я пытался, но я получил ошибку.

worker 11.03.2019 14:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете переписать этот запрос без использования переменной MySQL.

INSERT INTO
GSM_Parent (OrderNumber)
values ( (SELECT COALESCE( MAX( OrderNumber ) , 0 ) +1 FROM GSM_Parent) )

Thanks, but I got the following error:#1093 - You can't specify target table 'GSM_Parent' for update in FROM clause .

Действительно, я пропустил, что вы использовали одну и ту же таблицу дважды, запрос ниже должен работать.

INSERT INTO
  GSM_Parent (OrderNumber)
VALUES (
   (SELECT OrderNumber FROM (
     SELECT 
       (COALESCE(MAX(OrderNumber), 0) + 1) AS OrderNumber
     FROM
       GSM_Parent
     ) AS GSM_Parent
   ) 
)

Также возможен запрос @Jarth из комментариев, тогда вам нужно написать

INSERT INTO
  GSM_Parent (OrderNumber)
SELECT
  OrderNumber
FROM(
   SELECT COALESCE(MAX(OrderNumber), 0) +1 AS OrderNumber FROM GSM_Parent
) AS GSM_Parent

Спасибо, но я получил следующую ошибку: #1093 - Вы не можете указать целевую таблицу 'GSM_Parent' для обновления в предложении FROM.

worker 11.03.2019 14:32

В третьем утверждении я попытался INSERT INTO GSM_Parent (OrderNumber) VALUES ((SELECT OrderNumber FROM(SELECT COALESCE( MAX( OrderNumber ) , 0 ) +1 AS OrderNumber FROM GSM_Parent)), но получил. Каждая производная таблица должна иметь свою собственную ошибку псевдонима.

worker 11.03.2019 14:51

я знаю, что должен был форматировать запросы с самого начала, тогда я был бы более ясным, я пропустил псевдонимы при их вводе .. @worker это должно быть исправлено сейчас. Оба запроса должны работать.

Raymond Nijland 11.03.2019 14:52

После того, как я скопировал отредактированные, это сработало. Большое спасибо, я был очень близок ко второму решению, хотя

worker 11.03.2019 14:54

Другие вопросы по теме