如何使用php避免mysql中的重复条目
这里我做了一个生成随机键的函数如何使用php避免mysql中的重复条目,php,mysqli,do-while,Php,Mysqli,Do While,这里我做了一个生成随机键的函数 function gen_link(){ $link = ''; $s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; for ($i= 0 ; $i <= 4 ; $i++) $link = $link.$s[rand(0,63)]; return $link; } 但它似乎根本不起作用,它一直在循环。
function gen_link(){
$link = '';
$s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for ($i= 0 ; $i <= 4 ; $i++)
$link = $link.$s[rand(0,63)];
return $link;
}
但它似乎根本不起作用,它一直在循环。我能做什么?使用如下查询,而不是生成实际错误:
$sql = "insert ignore into `links` (`link`) values ('$link')";
$con = mysqli_connect("localhost", "shashi", "asd123", "redir");
do {
$link = gen_link();
$sql = "insert ignore into `links` (`link`) values ('$link')";
$result = mysqli_query($con, $sql);
} while (mysqli_affected_rows($con) == 0);
mysqli_close($con);
并检查以确保实际插入了某些内容:
while (mysqli_affected_rows($con) == 0);
总之,看起来是这样的:
$sql = "insert ignore into `links` (`link`) values ('$link')";
$con = mysqli_connect("localhost", "shashi", "asd123", "redir");
do {
$link = gen_link();
$sql = "insert ignore into `links` (`link`) values ('$link')";
$result = mysqli_query($con, $sql);
} while (mysqli_affected_rows($con) == 0);
mysqli_close($con);
另外,关于您的查询,请注意以下几点:
$link
变量,所以在给$link
变量一个值之后,您需要定义查询,因此我将该行移到了循环中。这可能是您一直循环的原始问题的根源gen_link()
中生成),但最好养成正确转义插入到查询中的变量的习惯。或者,读一读,用它们代替从DB as数组中获取现有键值。然后使用
in_array()
函数使用现有密钥搜索当前密钥。如果为真,则生成新密钥。如果条件为false,请插入新密钥
我正在使用准备好的语句“ON DUPLICATE KEY”,用MYSQL更改重复值:
$sql = "INSERT INTO ".$this->table." ".
"(".implode(',',$fields).") VALUES
(".implode(',',$values).")
ON DUPLICATE KEY
UPDATE key_field = concat(substr(key_field,1,".($laenge_key-3)."),FORMAT(FLOOR(RAND()*999),0))