SQL中的变量不适用于prepare语句

时间:2019-03-11 13:26:55

标签: php mysql sql mysqli phpmyadmin

我创建了一个小的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调用?

1 个答案:

答案 0 :(得分:0)

您可以在不使用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