如果我在内部重新运行功能,PDO将无法正常工作

时间:2019-06-30 08:43:16

标签: php sqlite pdo

我正在尝试创建一个系统,其中我的网站生成一个唯一代码(当前日期+ 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;
?>

有什么想法可以更好地编写此功能吗?

1 个答案:

答案 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();

}