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

时间:2016-06-16 12:11:27

标签: php mysql

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

有问题的查询是简单,快速的操作 - 类似于:

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

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

等等。没有加入,没有大量的数据。查询只需要几分之一秒。

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

类似的东西:

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;
}

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

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

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

if($tmp === 'empty'){
    ...
}else{
    ...
}

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

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

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

但肯定有人在某个地方遇到过查询失败...... 只是'因为?连接中的Hiccough,服务器重置,或者其他什么可能导致查询在第二次失败,但接下来会成功?并且可能需要第二次(或第三次)尝试提取数据......

右? ......对吗?

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

完美构造的查询失败是不常见的,我只是在浪费时间和资源进行这些重复尝试?一旦失败,总是失败?

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

0 个答案:

没有答案