За последние 24 часа нас посетили 16154 программиста и 1551 робот. Сейчас ищут 923 программиста ...

SQLite блокировка

Тема в разделе "PHP и базы данных", создана пользователем Hello_World, 17 окт 2016.

  1. Hello_World

    Hello_World Новичок

    С нами с:
    3 авг 2015
    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте.
    Скажите, как узнать, заблокирована ли при выполнении скрипта БД на запись(правку) или нет.
    Вот код, который изменяем запись в БД.
    Код (Text):
    1. <?php
    2.     $db = new SQLite3($_SERVER['DOCUMENT_ROOT'].'/data.db');
    3.     // ожидаем 5 секунд
    4.     $db->busyTimeout(5000);
    5.     // многопоточный режим
    6.     $db->exec('PRAGMA journal_mode=WAL;');
    7.     // блокируем БД на запись
    8.     $db->querySingle("BEGIN IMMEDIATE;");
    9.    
    10.     $NowTime = time();
    11.     $res = $db->query("SELECT id, Cat, FilePostName FROM Data WHERE Submit = 0 AND Time < $NowTime;");
    12.     while($row = $res->fetchArray(SQLITE3_ASSOC))
    13.     {
    14.         // делаем замену
    15.         if($db->exec('UPDATE Data SET Submit = 1 WHERE id = '.$row['id'].';') === TRUE)
    16.         {
    17.             // заменили значение
    18.             echo 'Succeeded Update '.$row['id'];
    19.         }
    20.         else
    21.         {
    22.             // ошибка замены
    23.             echo 'Fail Update '.$row['id'];
    24.  
    25.         }
    26.     }
    27.     $db->querySingle("COMMIT;");
    28.     $db->close();
    29.     unset($db);
    30. ?>
     
  2. Hello_World

    Hello_World Новичок

    С нами с:
    3 авг 2015
    Сообщения:
    11
    Симпатии:
    0
    Решил проблему изменением
    Код (Text):
    1. $db->busyTimeout(0);
    И добавлением
    Код (Text):
    1. $db->enableExceptions(true);
    для отлова исключений.