我有一个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;
是正确的选择当我想要取消查询时,如果只有一件事不起作用,因为我不想只是一个在最坏的情况下几个条目。
答案 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()
函数MySQL
或PHP
中的用户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的事务。
关键思想是事务将数据修改组合在一起。要么全部发生,要么都不发生。在此过程中,您可以使用commit
或rollback
,具体取决于您是否要保留更改或不保留任何更改。