Переменная в SQL не работает с оператором prepare - PullRequest
0 голосов
/ 11 марта 2019

Я создал небольшой оператор 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 имеет значение false.

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

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете переписать этот запрос, не используя переменную MySQL.

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

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

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...