По адресу
www.php.net/manual/en/pdo.begintransaction.php в комментариях рекомендуют вот такой способ оформления транзакций при обращении к базе SQLite:
<?php<br>
$conn = new PDO('sqlite:C:\path\to\file.sqlite');<br>
$stmt = $conn->prepare('INSERT INTO my_table(my_id, my_value) VALUES(?, ?)');<br>
$waiting = true; // Set a loop condition to test for<br>
while($waiting) {<br>
try {<br>
$conn->beginTransaction();<br>
for($i=0; $i < 10; $i++) {<br>
$stmt->bindValue(1, $i, PDO::PARAM_INT);<br>
$stmt->bindValue(2, 'TEST', PDO::PARAM_STR);<br>
$stmt->execute();<br>
sleep(1);<br>
}<br>
$conn->commit();<br>
$waiting = false;<br>
} catch(PDOException $e) {<br>
if(stripos($e->getMessage(), 'DATABASE IS LOCKED') !== false) {<br>
// This should be specific to SQLite, sleep for 0.25 seconds<br>
// and try again. We do have to commit the open transaction first though<br>
$conn->commit();<br>
usleep(250000);<br>
} else {<br>
$conn->rollBack();<br>
throw $e;<br>
}<br>
}<br>
}<br>
Спрашивается: существует ли ещё более нехитрый и изящный способ обработки ситуации
'DATABASE IS LOCKED'?
Можно ли, например, принудить модуль PDO в языке PHP к самостоятельному ожиданию разблокировки базы данных в течение некоторого заданного времени?
(А не то, сами понимаете, если при каждом обращении такой
if нагородить, то падает обозримость кода и читаемость.)