Я создал небольшой оператор 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?
почему у вас есть 2 запроса на операторе подготовки?
Спасибо за ответ, мне нужен этот тип запроса, и из-за этого у меня есть 2
Вам нужно будет выполнить 2 разных запроса.
INSERT INTO GSM_Parent (OrderNumber) SELECT ...?
Я пытался, но я получил ошибку.






Вы можете переписать этот запрос без использования переменной 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.
В третьем утверждении я попытался INSERT INTO GSM_Parent (OrderNumber) VALUES ((SELECT OrderNumber FROM(SELECT COALESCE( MAX( OrderNumber ) , 0 ) +1 AS OrderNumber FROM GSM_Parent)), но получил. Каждая производная таблица должна иметь свою собственную ошибку псевдонима.
я знаю, что должен был форматировать запросы с самого начала, тогда я был бы более ясным, я пропустил псевдонимы при их вводе .. @worker это должно быть исправлено сейчас. Оба запроса должны работать.
После того, как я скопировал отредактированные, это сработало. Большое спасибо, я был очень близок ко второму решению, хотя
prepareне поддерживает несколько утверждений.