Search code examples
phppdosqlitepersistent

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?


Solution

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