Php 检查数据库中是否存在ID

Php 检查数据库中是否存在ID,php,mysql,Php,Mysql,如何检查mysql数据库中是否存在id,以及是否存在:创建一个新id并再次检查。我有以下代码来创建id: $length = 10; $id = ''; for ($i = 0; $i < $length; $i++) { $id .= chr(rand(ord('0'), ord('9'))); } 您试图做的并不是“最佳实践”,因为(理论上)您可以创建一个无限循环(创建一个随机ID,然后检查是否存在可能会在每次迭代中“命中”) 创建唯一ID的更好解决方案是将列设置为主键,并在

如何检查mysql数据库中是否存在id,以及是否存在:创建一个新id并再次检查。我有以下代码来创建id:

$length = 10;
$id = '';
for ($i = 0; $i < $length; $i++) {
    $id .= chr(rand(ord('0'), ord('9')));
}

您试图做的并不是“最佳实践”,因为(理论上)您可以创建一个无限循环(创建一个随机ID,然后检查是否存在可能会在每次迭代中“命中”)

创建唯一ID的更好解决方案是将列设置为主键,并在每次插入时递增


如果您希望另一列是唯一的,您也可以将该列定义为唯一的,但不必依赖“随机”字符串。

请注意错误,您使用此id的目的是什么,为什么是随机的?id列是主键吗?如果是,您可以使用类似的方法来检查重复的键,并创建一个新条目(如果它已经存在于一条语句中)。但是仍然不确定你想要完成什么。为什么你需要“再检查一遍”?一旦它被插入数据库,你就知道它在那里。@Matt-我想他的意思是,如果这个ID正在使用,他可以生成一个新的ID并检查它。@andrewsi我理解;我不明白的是为什么OP需要检查他刚才输入的ID是否在数据库中。问题不是理论上的无限循环,而是阻止
INSERT
调用的
UNIQUE
约束,该约束只需要一个查询就可以出错。这优于
选择
然后
插入
,后者更容易出现竞争条件。没有
UNIQUE
索引,就无法保证唯一性。@tadman说。你的评论比我的回答更准确。虽然我知道那是真的,但我没有这样解释。非常感谢。
$database->query('SELECT user_id FROM users 
                  WHERE public_id = ':public_id',array(':public_id' => $public_id)');

if($database->count() >= '1') { 
//create a new id 
} else { }