如果序列化失败,PHP重试PDO执行:1213尝试获取锁时发现死锁

时间:2019-01-08 15:30:27

标签: php

我有2个PHP应用程序插入/更新导致死锁的同一张表。第一个应用程序将每2分钟出现一次,并扫描要插入/更新的新文件,并执行OCR流程,该流程后来又更新了另一个表,我认为这会导致死锁,因为该过程可能花费最长的时间。第二个应用程序是将归档数据移到同一表中,该表具有超过几百万条记录,8个以上的计数。我已经读过一个选项,可以编写3次重试循环。但是,我认为它没有用。这是下面的代码。我也愿意接受其他建议。

$retry=0;
$notdone=TRUE;
while ($notdone && $retry<3){
    try{
     $stmt = $pdo->prepare($qry);
     $stmt->execute($dataArray);
     $notdone=FALSE;
    }catch(Exception $e){
     $retry++;
     $log->trace("Retry count at $retry, delay 5 seconds before executing");
     sleep(5);
    }
}
if($retry == 3) {
    $retVal['error'] = "Statement 1 Error: could not connect to database: ".$e->getMessage();
    $log->trace($retVal['error']);
}

1 个答案:

答案 0 :(得分:0)

发现问题是由于使用了错误的异常,一旦我使用了PDOexception,我就启动了正确的重试。