PHP PDO sqlite:无法打开数据库
PHP PDO sqlite: Unable to open database
我在 php 开发了一个网络应用程序,使用 sqlite 将数据存储在数据库中。正如在互联网上看到的那样,我使用 PDO 而不是 SQLITE3 class。我执行了互联网上显示的所有步骤以避免出现此错误消息,但它仍然出现:
SQLSTATE[HY000] [14] unable to open database file
一个周期性任务是运行每30秒获取一个table中的条目数。此任务由 Javascript/Jquery 触发。在正常的 php 文件上,我使用 PDO 没有任何问题。但是将它与 Javascript/Jquery 结合使用我会收到上面的消息。
我已经将整个路径和数据库设置为网络服务器的 user/group 和 chmod 0777。
我自己编写的数据库class创建并存储在一个Session变量中,以避免在网页的生命周期中创建和销毁。
这个函数连接到数据库(这个和下一个函数在同一个class):
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['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=
是否需要任何 sqlite pdo 设置?
我解决了这个问题。不幸的是,错误消息令人困惑,因为 PHP 没有找到该文件。
始终使用绝对路径,以避免此错误,即使权限、用户和组设置正确。
我在 php 开发了一个网络应用程序,使用 sqlite 将数据存储在数据库中。正如在互联网上看到的那样,我使用 PDO 而不是 SQLITE3 class。我执行了互联网上显示的所有步骤以避免出现此错误消息,但它仍然出现:
SQLSTATE[HY000] [14] unable to open database file
一个周期性任务是运行每30秒获取一个table中的条目数。此任务由 Javascript/Jquery 触发。在正常的 php 文件上,我使用 PDO 没有任何问题。但是将它与 Javascript/Jquery 结合使用我会收到上面的消息。
我已经将整个路径和数据库设置为网络服务器的 user/group 和 chmod 0777。
我自己编写的数据库class创建并存储在一个Session变量中,以避免在网页的生命周期中创建和销毁。
这个函数连接到数据库(这个和下一个函数在同一个class):
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['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=
是否需要任何 sqlite pdo 设置?
我解决了这个问题。不幸的是,错误消息令人困惑,因为 PHP 没有找到该文件。 始终使用绝对路径,以避免此错误,即使权限、用户和组设置正确。