【问题标题】:Multiple Insert in different tables with insert new AI使用插入新 AI 在不同表中多次插入
【发布时间】:2015-07-11 22:12:51
【问题描述】:

我有一个 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; 是正确的选择,因为在最坏的情况下我不想只有几个条目.

【问题讨论】:

  • 无论您做什么,将用户提供的数据直接插入您的数据库都不是最好的主意。我建议将 MySQLi 或 PDO 与准备好的语句一起使用。我自己对 MySQLi 并不熟悉,但对于 PDO,使用 beginTransaction() / endTransaction()

标签: php mysql


【解决方案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);

然后使用MySQLPHPmysql_insert_id() 函数获取用户ID:

  $userid=$mysqli->insert_id;

和:

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

【讨论】:

    【解决方案2】:

    评论太长了。

    要获取刚刚插入的 id,请使用 last_insert_id()。这个函数记录在here

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      相关资源
      最近更新 更多