我正在使用 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/