我正在尝试创建一个系统,其中我的网站生成一个唯一代码(当前日期+ 5个随机字符),并将该代码传输到数据库中的表中。
在函数generateNumber()可以将唯一代码插入数据库之前,它必须检查该代码是否已存在于数据库中。
如果代码不存在,则我的功能可以正常工作。但是问题是,当代码已经可以在数据库中找到时,我的网站什么都不做(应该重新运行该功能)。
import { throwError } from 'rxjs';
it('should handle getHero() error response',()=>{
spyOn(component.heroDetailService,'getHero').and.returnValue(throwError('error'));
// do the testing and the service would return error
})
控制台中没有错误消息,但是我怀疑问题出在代码的这一部分:
function generateNumber()
{
global $conn;
$rand = strtoupper(substr(uniqid(sha1(time())),0,5));
$result = date("Ydm") . $rand;
$SQL = $conn->query("SELECT code FROM test WHERE code='$result'");
$c = $SQL->fetch(PDO::FETCH_ASSOC);
if ($c['code'] > 0) { // test if $result is already in the database
generateNumber();
} else {
$sql2 = "INSERT INTO test (code) VALUES (?)";
$stmt2 = $conn->prepare($sql2);
$stmt2->execute([$result]);
return $result;
}
}
try {
$conn = new PDO("sqlite:db"/*, $username, $password*/);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo generateNumber();
}
catch(PDOException $e) {
echo "Error:" . $e->getMessage();
}
$conn = null;
?>
有什么想法可以更好地编写此功能吗?
答案 0 :(得分:2)
解决方案:
if ($c['code'] > 0) { // test if $result is already in the database
// if the code exists in db the function return nothing
// because you are missing a return :
return generateNumber();
}