Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止SQLITE SQLSTATE[HY000][14]?_Php_Pdo_Sqlite_Persistent - Fatal编程技术网

Php 如何防止SQLITE SQLSTATE[HY000][14]?

Php 如何防止SQLITE SQLSTATE[HY000][14]?,php,pdo,sqlite,persistent,Php,Pdo,Sqlite,Persistent,我有时会收到以下错误: SQLSTATE[HY000][14]无法打开数据库文件 我使用 new PDO("sqlite:database/datbase.db","","",array( PDO::ATTR_PERSISTENT => true )); 每次我想从数据库读取或写入数据时。开放进程具有以下功能: function opendatabase(){ try{ return new PDO("sqlite:database/database.db","","",

我有时会收到以下错误:

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/*无法打开数据库文件*/

似乎您已经打开了许多连接,如果连接已打开,我建议您重新使用该连接

创建属性:

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()语句。在这种情况下,错误消息确实会误导用户。 这里有一个问题是关于我经过几天的故障排除后设法解决的同一个错误消息。

非常奇怪,但对我来说,这是因为没有将新的PDO语句包装到try/catch块中。

您必须使用持久连接吗?