2013-05-27 38 views
0

我正在使用php的登录模块,并面临生成ID的问题。生成新ID:获取实际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 

回答

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。

+0

它的工作原理。谢谢你的时间! – Akryllax