在不同的表中插入多个插入新的AI
问题描述:
我有一个PHP脚本,我可以在其中注册新闻用户。 当然我想插入像用户名,密码等(这些值来自用户),但另一方面,我想插入他的user_id(新用户!)到另一个表中。在不同的表中插入多个插入新的AI
我的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;
正确的选择时,我想,如果只有一两件事没有工作查询取消了,因为我不想让在最坏的情况下只有几个条目。
答
我建议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
或可替代mysql_insert_id()
功能的用户ID在PHP
:
$userid=$mysqli->insert_id;
和:
$query="INSERT INTO users_startmodules (user_id, startmodule, enabled) VALUES ('$userid', 'newsmodule', '1');";
$mysqli->query($query);
答
这是一个评论太长。
要获取刚刚插入的ID,请使用last_insert_id()
。该功能记录在here。
接下来,您的问题的答案是开始一个交易。我会给你的语法,但在开始使用它之前,最好先阅读关于事务的documentation。
关键的想法是交易将数据修改组合在一起。要么全部发生,要么全不发生。一路上,您可以使用commit
或rollback
,具体取决于您是要保留更改还是不保留更改。
无论你做什么,将用户提供的数据直接插入数据库并不是最好的想法。我建议使用MySQLi或PDO和准备好的语句。我不是MySQLi自己的formilliar,但是对于PDO,它是使用'beginTransaction()'/'endTransaction()' – icecub