2014-09-04 86 views
2

我有时会收到以下错误:如何防止SQLITE SQLSTATE [HY000] [14]?

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

我用

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

,每次我要读或向数据库中写入数据打开DATEBASE。在开放的过程如下功能:

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(); 
} 
} 

经过一段时间(有时一个多小时,有的时候过了几分钟,我得到在文章的开头的错误消息后,我怎样才能避免这种错误

+0

您是否必须使用持续连接? – 2014-09-04 14:49:56

回答

2

这是SQLlite错误:

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

好像你已经打开了许多连接,我建议你重新使用连接,如果它是开放的

创建一个属性:

private $pdo; 

并检查它是否是空创建新对象之前:

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(); 
    } 
} 
0

很奇怪,但对我来说,这是由于没有在try/catch块中包装新的PDO语句造成的。