【发布时间】:2012-12-14 14:26:30
【问题描述】:
我正在创建一个随机用户 ID,但我想检查该 ID 是否已被使用(不太可能,但有机会),但不知何故这不起作用。当我查看数据库时,account_id 字段中没有随机字符串。我是否以错误的方式调用函数?
function genRandomString() {
$length = 40;
$characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
function createID() {
$cl_id = 'h_u_'.genRandomString();
}
createID();
$sql_query="SELECT * FROM accounts WHERE account_id = :cl_id";
$statement = $conn->prepare($sql_query);
$statement->bindParam(':cl_id', $cl_id, PDO::PARAM_STR);
if ($statement->execute() && $row = $statement->fetch())
{
createID();
}
$conn->exec("INSERT INTO accounts SET
account_id='$cl_id' ,
name='$_POST[name]' ,
email='$_POST[email]' ");
【问题讨论】:
-
您没有自动增量列吗?那会减少检查ID是否存在的痛苦吗?因为自动递增的列只会通过递增的数字自动填充您的 ID 列并确保没有行是完全相同的
-
他可以将 id 列作为主键并将他的 user_id 添加为 varchar(10) 或其他内容作为唯一索引 ...
-
在许多方面将主键作为字符串并不是很有效。另外,您的代码不保证该列将是唯一的(假设您在该列上也设置了此约束)。为什么没有 AUTO_INCREMENT PK,如果您真的 需要一些唯一标识符字符串,只需从用户 ID(PK 自动增量)和电子邮件生成一个 (sha1)。无论如何,两者首先都应该是独一无二的......
标签: php function insert pdo user-registration