2015-07-11 39 views
1

我有一个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;正确的选择时,我想,如果只有一两件事没有工作查询取消了,因为我不想让在最坏的情况下只有几个条目。

+0

无论你做什么,将用户提供的数据直接插入数据库并不是最好的想法。我建议使用MySQLi或PDO和准备好的语句。我不是MySQLi自己的formilliar,但是对于PDO,它是使用'beginTransaction()'/'endTransaction()' – icecub

回答

1

我建议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); 
1

这是一个评论太长。

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

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

关键的想法是交易将数据修改组合在一起。要么全部发生,要么全不发生。一路上,您可以使用commitrollback,具体取决于您是要保留更改还是不保留更改。