下面是我的代码,用于检查生成的随机数是否在数据库中可用。如果$ smsCode已经在数据库中,则生成一个新的随机数。但它没有按预期工作。
settings
DATE_INPUT_FORMATS = ( '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y')
已经存在于数据库中,但它会将$smsCode = 7552;
$query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
while($conn->query($query) === TRUE){
$smsCode = rand(1000,9999);
$query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
$conn->query($query);
}
$sql = "INSERT INTO appointment(number) VALUES('$smsCode');
存储到数据库中,而不是生成要存储在数据库中的新数字。
答案 0 :(得分:2)
<?php
$sms_code=rand(1000,9999);
$cond=True;
while($cond){
$query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
$result = $conn->query($query);
if(mysql_num_rows($result)>0)
{
$sms_code=rand(1000,9999);
}
else
{
$cond=False;
}
}
$sql = "INSERT INTO appointment(number) VALUES('$smsCode')";
?>
答案 1 :(得分:1)
如果第一个查询的结果返回有效结果,则不会返回true
。如果query()
函数失败,则false
函数仅返回true
,请参阅PHP manual。因此,你的while循环的条件,你在布尔=
(与三个$smsCode
的严格类型比较的原因)进行比较将永远不会成立,因此没有为{{1分配新值}}
尝试这样的事情
$smsCode = 7552;
while(true) {
$query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
if($conn->query($query) === false) {
$sql = "INSERT INTO appointment(number) VALUES('$smsCode')";
break;
} else {
$smsCode = rand(1000,9999);
}
}
每次在数据库中没有包含该代码的行时,这应生成一个新代码。
答案 2 :(得分:0)
你可以试试这个
$date = date_create();
$smsCode = date_timestamp_get($date);
每次它会给你一个独特的随机数