多个插入在不同的表中插入新的AI

时间:2015-07-11 13:51:58

标签: php mysql

我有一个PHP脚本,我可以在其中注册新闻用户。 当然我想插入用户名,密码等内容(这些值来自用户),但另一方面我想将他的user_id(新用户!)插入到另一个表中。

我的SQL

$sql =  "
            BEGIN;
                INSERT INTO users (username, password, auth_lvl, realname, usercolor) VALUES ('$username', '$password', '$auth_lvl', '$realname', '$usercolor');
                INSERT INTO users_startmodules (user_id, startmodule, enabled) VALUES ('(SELECT MAX(user_id)+1 FROM users)', 'newsmodule', '1');
            COMMIT;
            ";

我如何解决这个问题,BEGIN; ... COMIT;是正确的选择当我想要取消查询时,如果只有一件事不起作用,因为我不想只是一个在最坏的情况下几个条目。

2 个答案:

答案 0 :(得分:1)

我建议将users表中 user_id 的类型更改为auto_increment,如下所示:

alter table users alter column user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

现在,假设您已转义用户输入数据:

$query="INSERT INTO users (username, password, auth_lvl, realname, usercolor) VALUES ('$username', '$password', '$auth_lvl', '$realname', '$usercolor');"

并运行:

 $mysqli->query($query);

然后获取mysql_insert_id()函数MySQLPHP中的用户ID:

  $userid=$mysqli->insert_id;

  $query="INSERT INTO users_startmodules (user_id, startmodule, enabled) VALUES ('$userid', 'newsmodule', '1');";
   $mysqli->query($query);

答案 1 :(得分:1)

评论太长了。

要获取刚刚插入的ID,请使用last_insert_id()。此功能记录在here

接下来,您的问题的答案是开始交易。我会给你语法,但最好在你开始使用它们之前阅读documentation的事务。

关键思想是事务将数据修改组合在一起。要么全部发生,要么都不发生。在此过程中,您可以使用commitrollback,具体取决于您是否要保留更改或不保留任何更改。