PHP,MySQL - 在循环内重复查询直到成功,这只是资源消耗吗?

Bir*_*rel 5 php mysql

我正在尝试通过增加执行成功查询的机会来改善用户体验。

有问题的查询是简单、快速的操作——例如:

$stmt = $db->prepare('SELECT val1, val2, val3 FROM table WHERE id=?');
$stmt->execute(array($someID));
...
Run Code Online (Sandbox Code Playgroud)

或者

$stmt = $db->prepare('INSERT INTO table (val1, val2, val3) VALUES (?, ?, ?)');
$stmt->execute(array($val1, $val2, $val3));
Run Code Online (Sandbox Code Playgroud)

等等。没有连接,没有大量的数据。查询需要几分之一秒。

因为它们非常快,所以我认为多次循环同一个查询是合适和安全的,如果它失败了。

就像是:

function test($someVal, $db){
    $db->beginTransaction();
    try{
        $stmt = $db->prepare('SELECT val1, val2, val3 FROM table WHERE id=?');
        $stmt->execute(array($someVal));

        $result = $stmt->fetchAll();

        $db->commit();

        if(count($result)){
            $arr = array();
            $arr['val1'] = $result[0]['val1'];
            $arr['val2'] = $result[0]['val2'];
            $arr['val3'] = $result[0]['val3'];
        }else{
            return 'empty';
        }

        return $arr; // All went well!
    }catch(Exception $e){
        $db->rollBack();
        // note the exception
        return false;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

然后循环几次(显然不是无限期)

$i = 0;
$tmp = test($someVal, $db);
while(!$tmp){
    $i++;
    if($i === 3){
        // report it
        exit();
    }

    $tmp = test($someVal, $db);
}

if($tmp === 'empty'){
    ...
}else{
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,循环将尝试查询最多 3 次,等待两次初始失败。

但是,如果失败是否值得循环?

到目前为止,根据我的经验,我从未遇到过具有正确语法、称为正确表、具有正确值的查询失败(除非有一次服务器因维护而停机)。这意味着如果查询失败,它将继续失败,因为出现问题。

但肯定有人在某个地方有一个查询失败......只是因为?连接中的打嗝、服务器重置或其他什么可能导致查询在这一秒失败,但在下一秒成功?也许第二次(或第三次)尝试提取数据就足够了......

对?... 对?

就像我说的,这些不是过于费力的查询。但是如果没有他们返回的数据,用户就无法继续进行。

完美构造的查询失败的情况是否如此罕见,以至于我只是在浪费时间和资源进行这些重复尝试?一次失败,永远失败?

我知道这取决于失败的来源,并且某些错误(即表不存在)将继续失败。我想知道是否值得额外打电话来尝试挽救其他失败?