我知道这不是最好的设置,但我被它卡住了,无法更改它。
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);
}