php - 正在生成新 ID : Getting actual IDs

标签 php mysql

我正在使用 php 开发登录模块,但在生成 ID 时遇到了一些问题。

在注册部分,我需要为每个用户生成一个唯一的 ID。我以为我可以通过将数据库中的最后一个 ID 递增 1 来生成此 ID,但它似乎不起作用。

这是我的代码:

    $user = $_POST['post_username'];
    $pass = $_POST['post_password'];

    function generateID(){

    $aux = mysql_query("SELECT usr_id FROM users");

    $i = 0;

    $resulArray = mysql_fetch_row($aux) or die("Error fetching!");
    $n = mysql_num_rows($aux);

    $b = $resulArray[$i];
    $c = $b;
    for($i = 0; $i < $n; $i = $i +1){
        $b = $resulArray[$i];
        if($b >= $c) $c = $b;
    }

    return $c + 1;}

这是我的 MySQL 结构:

username -> String
password -> String
usr_id   -> int

最佳答案

不要这样做。它不可靠,无法解决竞争条件。只需使用一个自增主键:

CREATE TABLE users
   id unsigned int auto_increment primary key,
   ...
);

然后

INSERT INTO users (id, ....) VALUES (null, ...)

$userID = mysql_last_insert_id();

这本质上是可靠的,可以处理竞争条件,并将保证此表的唯一 ID。您不需要任何自定义验证,只需自动递增 id 字段并让 MySQL 处理 id。

关于php - 正在生成新 ID : Getting actual IDs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780131/

相关文章:

php - MySQL 删除多列

mysql - 使用if语句更新表

mysql - 列出拥有最多代币的用户

mysql - Tricky sql query for popularity

mysql - 通过 1 个查询获取 2 个相关组?

php - 损坏的 CSS Sprite

php - 如何在普通主机账户上安装 Propel?

PHP 选择查询

mysql - 如何从 MySQL 中提取多列,其中一列是唯一值

PHP shell_exec 插入 MySQL