使用PHP连接到使用ODBC的MS Access数据库保持锁定


Using PHP to connect to MS Access DB using ODBC keeps on locking

我知道这不是最好的设置,但我被它卡住了,无法更改它。

PHP连接到本地的MS Access DB(.mdb),以记录脚本正在执行的某些活动。当只有一个脚本实例在运行时,这种方法可以很好地工作。然而,如果运行两个实例,我偶尔会得到以下错误:

odbc_exec(): SQL error: [Microsoft][ODBC Microsoft Access Driver] Could not update; currently locked., SQL state S1000 in SQLExecDirect

这种情况只是间歇性发生的,所以我假设只有当两个脚本碰巧同时试图写入同一个表时才会发生。我从未在MySQL等其他数据库中遇到过这个问题。如何告诉PHP/ODBC/Access不锁定,或者在锁定时重试?

为了进行故障排除,我通常还会在屏幕上打开Access DB。

odbc_exec()在查询失败时返回FALSE,因此您可以检查查询结果并继续尝试,直到成功:

$sql = "UPDATE [Clients] SET [Position]='somewhere' WHERE [ID]=1";
while (TRUE) {
    $result = odbc_exec($conn, $sql);
    if ($result) {
        break;
    }
    else {
        $lastError = odbc_error();
        if ($lastError != "S1000") {
            echo "ODBC error $lastError";
            break;
        }
    }
    sleep(1);
}