0

我正在开发 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
4

1 回答 1

5

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

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。

于 2013-05-27T20:31:25.783 回答