我知道这不是最好的设置,但我坚持使用它并且无法改变它。
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以进行故障排除。
答案 0 :(得分:0)
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);
}