Irgendw Pointer Irgendw Pointer - 28 days ago 14
PHP Question

How to prevent SQLITE SQLSTATE[HY000] [14]?

I receive sometimes the following error:


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


I open the datebase by using

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


everytime I want read or write data from or to the database. The open process is the following function:

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


After some time (sometime more than an hour, some times after some minutes I get the error message at the beginning of the post. How can I prevent such error?

Answer

This is an error from SQLlite :

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

It seems like you have opened to many connections, I suggest you to reuse the connection if it is open.

Create a property:

private $pdo;

And check if it's null before creating a new object:

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