alienzzzz
интернет бизнес
PDO (SQLite) General error: 5 database is locked, как бороться ?
есть 2 скрипта:
Они одинаковые, одна разница только в том, что в первом скрипте я вставил функцию sleep .
проблема в том, что, во втором скрипте(когда первый работает), когда я выполняю обновление ($oDB->service->set('update....) у меня возникает ошибка
SQLSTATE[HY000]: General error: 5 database is locked
А хотелось бы сделать, чтоб второй скрипт подождал, пока первый не освободит базу(закончится ф. sleep) и после этого он сделал UPDATE.
Можно убрать транзакции ( $oDB->service->transaction( ); ), тогда все работает и ошибки нет, но получается не чисто (., так как много обращений будет и не обязательно такие простые как в примере.
есть 2 скрипта:
PHP:
/* 1..... */
try{
$oDB->service->transaction( );
$oDB->service->set('update service set srv_descr = :srv_descr where srv_id = :srv_id',array('srv_id' => 169,'srv_descr' => 'test-'.uniqid()));
/* для отлова ошибки database lock */
sleep( 10 );
$aService = $oDB->service->getRow('select * from service where srv_id = :srv_id',array('srv_id' => 169));
$oDB->service->commit( );
print_r( $aService );
}catch(Except $oExcept ){
echo $oExcept->GetMsg();
}
PHP:
/* 2 ..... */
try{
$oDB->service->transaction( );
$oDB->service->set('update service set srv_descr = :srv_descr where srv_id = :srv_id',array('srv_id' => 169,'srv_descr' => 'test-'.uniqid()));
$aService = $oDB->service->getRow('select * from service where srv_id = :srv_id',array('srv_id' => 169));
$oDB->service->commit( );
print_r( $aService );
}catch(Except $oExcept ){
echo $oExcept->GetMsg();
}
Они одинаковые, одна разница только в том, что в первом скрипте я вставил функцию sleep .
проблема в том, что, во втором скрипте(когда первый работает), когда я выполняю обновление ($oDB->service->set('update....) у меня возникает ошибка
SQLSTATE[HY000]: General error: 5 database is locked
А хотелось бы сделать, чтоб второй скрипт подождал, пока первый не освободит базу(закончится ф. sleep) и после этого он сделал UPDATE.
Можно убрать транзакции ( $oDB->service->transaction( ); ), тогда все работает и ошибки нет, но получается не чисто (., так как много обращений будет и не обязательно такие простые как в примере.