我正在尝试通过增加成功查询的机会来改善用户体验。
有问题的查询是简单,快速的操作 - 类似于:
$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,服务器重置,或者其他什么可能导致查询在第二次失败,但接下来会成功?并且可能需要第二次(或第三次)尝试提取数据......
右? ......对吗?
就像我说的那样,这些都不是过于费劲的查询。但是如果没有他们返回的数据,用户就无法继续前进。
完美构造的查询失败是不常见的,我只是在浪费时间和资源进行这些重复尝试?一旦失败,总是失败?
我理解它取决于失败的来源,并且某些错误(即表不存在)将继续失败。我想知道是否值得额外的电话试图挽救其他失败?