Как предотвратить SQLITE SQLSTATE ?

Иногда я получаю следующую ошибку:

SQLSTATE [HY000] [14] не удалось открыть файл базы данных

Я открываю базу данных, используя

new PDO("sqlite:database/datbase.db","","",array( PDO::ATTR_PERSISTENT => true )); 

каждый раз, когда я хочу читать или записывать данные из или в базу данных. Открытым процессом является следующая функция:

 function opendatabase(){ try{ return new PDO("sqlite:database/database.db","","",array( PDO::ATTR_PERSISTENT => true )); }catch(PDOException $e){ logerror($e->getMessage(), "opendatabase"); print "Error in openhrsedb ".$e->getMessage(); } } 

Через некоторое время (иногда более часа, несколько раз через несколько минут я получаю сообщение об ошибке в начале сообщения. Как я могу предотвратить такую ​​ошибку?

    Это ошибка SQLlite:

    #define SQLITE_CANTOPEN 14 /* Unable to open the database file */

    Кажется, что вы открыли для многих соединений, я предлагаю вам повторно использовать соединение, если оно открыто.

    Создайте свойство:

     private $pdo; 

    И проверьте, не имеет ли значение null перед созданием нового объекта:

     function opendatabase(){ try{ if($this->pdo==null){ $this->pdo =new PDO("sqlite:database/database.db","","",array( PDO::ATTR_PERSISTENT => true )); } return $this->pdo; }catch(PDOException $e){ logerror($e->getMessage(), "opendatabase"); print "Error in openhrsedb ".$e->getMessage(); } } 

    Если кто-либо имеет одно и то же сообщение при повторном использовании соединения PDO и все еще имеет проблемы, возможно, это связано с тем, что вы сохраняете изображения, полученные из fopen (), и забыли оператор fclose (). В этом конкретном случае сообщение об ошибке действительно вводит в заблуждение. Вот вопрос для того же сообщения об ошибке, которое мне удалось решить через несколько дней после устранения неполадок. SQLSTATE [HY000] [14]: невозможно открыть базу данных, поскольку слишком много соединений уже открыты

    Очень странно, но для меня это было вызвано не обертыванием новой инструкции PDO в блок try / catch.