PHP PDO sqlite : Unable to open database

标签 php jquery sqlite pdo

我使用 sqlite 在 php 中开发了一个 webapp,用于将数据存储在数据库中。正如在互联网上看到的那样,我使用 PDO 而不是 SQLITE3 类。我执行了互联网上显示的所有步骤以避免出现此错误消息,但它仍然出现:

SQLSTATE[HY000] [14] unable to open database file

周期性任务每 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=  

是否需要任何 sqlite pdo 设置?

最佳答案

我解决了这个问题。不幸的是,错误消息令人困惑,因为 PHP 没有找到该文件。 始终使用绝对路径,以避免此错误,即使权限、用户和组设置正确也是如此。

关于PHP PDO sqlite : Unable to open database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666834/

相关文章:

Rails Controller 返回 200 OK 时未触发 jquery ajax 成功回调

java - Android SQLite 数据库上的 ORMLite groupByRaw 和 groupBy 问题

java - SQLite 比较两个密码时,如果它们不匹配,而 sysout 会正确打印它们

ios - 删除 sqlite 数据库中的所有行不起作用 - iOS

php - 可捕获的 fatal error : Object of class PDOStatement could not be converted to string

php - 在 Codeigniter 中上传多个文件

php - 如何设置自定义 laravel 资源 Controller 请求 url

php - 比较 laravel 中的两个集合数组

javascript - 使用 jQuery Validate 规则标记必填字段

javascript - 访问通过函数构造的 JavaScript 对象中的变量