【问题标题】:How do I use SET to create a LAST_INSERT_ID user-defined variables in mysql?如何使用 SET 在 mysql 中创建 LAST_INSERT_ID 用户定义变量?
【发布时间】:2020-12-24 20:55:40
【问题描述】:

我需要将值插入多个表,其中第一个表(用户)的主键 (id) 是后续表(电子邮件等)的外键 (user_id)。

我在 MySQL Workbench 中制定了以下查询,它在那里工作得非常好。但是,当我在正在开发的网站表单的上下文中运行它时,我不断收到以下行的语法错误消息:SET @nameID = LAST_INSERT_ID();

INSERT INTO users (first_name, last_name)
  VALUES('John', 'Doe');
SET @userID = LAST_INSERT_ID();
INSERT INTO email (user_id, email)
  VALUES(@userID,'johndoe@email.com');
INSERT INTO phone_number (user_id, phone_number)
  VALUES(@userID, 4546254758);

我花了一些时间试图找出问题所在,但到目前为止还没有找到答案。任何帮助将不胜感激。

编辑:更新代码以表明“多个”是指两个以上。

【问题讨论】:

  • 考虑使用 NEW.ID 而不是 last_insert_id 的插入后触发器(假设 ID 是用户中的 auto_increment 列)。

标签: mysql variables set last-insert-id


【解决方案1】:

不要一次性运行所有查询, 你应该一个一个运行然后它会通过php正常工作, 试试这样

    $mysqli = new mysqli('localhost', 'root', '', 'test');
    $mysqli->query("INSERT INTO users (first_name, last_name)
       VALUES('John8', 'Doe');" );
    $mysqli->query('SET @userID = LAST_INSERT_ID();' );
    $mysqli->query("INSERT INTO email (user_id,email) VALUES ( @userID 
       ,'johndoe8@email.com');" );

【讨论】:

  • 谢谢,这似乎有效。我想为经过的数据添加一条 if/else 确认消息,但我仍然不熟悉面向对象的 mysql。您是否有可用的解决方案,或者知道我可以去哪里解决问题?
  • 它更简单安全,尝试使用PDO是最后一个面向对象的mysqli尝试搜索youtube最多2天你会熟悉它
【解决方案2】:

您不需要为此使用用户变量。如果您在同一个数据库会话中按顺序运行这两个查询,您可以这样做:

INSERT INTO users (first_name, last_name)
  VALUES('John', 'Doe');
INSERT INTO email (user_id, email)
  VALUES(LAST_INSERT_ID(),'johndoe@email.com');

【讨论】:

  • 抱歉,我应该澄清一下,“多个”是指两个以上。当我使用您之前建议的方法时,我发现在每个查询中重复 LAST_INSERT_ID() 会弄乱数据输入,所以我认为我需要使用变量。我还刚刚测试了您给出的特定示例,但它仍然给我一个语法错误。
猜你喜欢
  • 1970-01-01
  • 2011-07-28
  • 2015-02-04
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 2014-01-20
  • 2015-06-19
相关资源
最近更新 更多