Я разрабатываю webapp в php, используя sqlite для хранения данных в базе данных. Как видно из Интернета, я использую PDO вместо класса SQLITE3. Я сделал все шаги, показанные в Интернете, чтобы избежать этого сообщения об ошибке, но оно все еще появляется:
SQLSTATE [HY000] [14] не удалось открыть файл базы данных
Периодическая задача выполняется каждые 30 секунд, чтобы получить количество записей в таблице. Эта задача запускается Javascript / Jquery. В обычных php-файлах у меня нет проблем с использованием PDO. Но используя его в сочетании с Javascript / JQuery, я получаю сообщение выше.
Я установил уже весь путь и базу данных для пользователя / группы веб-сервера и в chmod 0777.
Мой собственный класс базы данных создается и сохраняется в переменной Session, чтобы избежать создания и уничтожения в течение всей жизни веб-страницы.
Эта функция соединяется с базой данных (эта и следующая функция находятся в одном классе):
private $db = null; private function connectdb(){ try { $this->db = new PDO(database,"","",array( PDO::ATTR_PERSISTENT => TRUE, PDO::ERRMODE_EXCEPTION => TRUE)); } catch (PDOException $e) { logerror($e->getMessage(), "connecthrsedb"); return exception; } }
Эта функция выполняет запрос:
function getNumberofEntriesinTable() { try { if (is_null($this->db)) { if ($this->connectdb() < 0) { return -1; } } $statement = "select count(*) from table;"; $res = $this->db->query($statement); $res = $res->fetch(); $res = $res['count(*)']; $this->db = null; return $res; } catch (PDOException $e) { syslog(LOG_ERROR,$e->getMessage()); return -1; } }
При запуске генерируется переменная session $_SESSION['database']
.
Эта функция javascript / jquery должна делать следующее:
function getData(){ $.post("php/getdatafromdb.php",{action: 'getdata'},function(data){ console.log(data); } setTimeout(function () {getData();},30000); }
Функции javascript / jquery работают хорошо и выполняются с помощью функции setTimeout. Однако я не знаю, как предотвратить или удалить эту проблему. Как я могу это решить?
В моем файле PHP ini есть следующие записи, касающиеся sqlite и pdo:
[sqlite] ; http://php.net/sqlite.assoc-case ;sqlite.assoc_case = 0 [sqlite3] ;sqlite3.extension_dir = [Pdo] ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" ; http://php.net/pdo-odbc.connection-pooling ;pdo_odbc.connection_pooling=strict ;pdo_odbc.db2_instance_name [Pdo_mysql] ; If mysqlnd is used: Number of cache slots for the internal result set cache ; http://php.net/pdo_mysql.cache_size pdo_mysql.cache_size=2000 ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. ; http://php.net/pdo_mysql.default-socket pdo_mysql.default_socket=
Нужны ли какие-либо настройки sqdo pdo?
Я решил проблему. К сожалению, сообщение об ошибке запутывает, потому что PHP не нашел файл. Используйте всегда абсолютные пути, чтобы избежать этой ошибки, даже если права, пользователь и группа установлены правильно.