sqlite correct path/URI for php pdo on windows

12,567

Solution 1

The solution

Notice the simple slash in the DSN sqlite:/ ? Just drop it !

write your DSN like this :

sqlite:name.db.

This works with relative and absolute paths so :

$dsn = 'sqlite:c:\full\path\to\name.db'; // --WORKS--

$dsn = 'sqlite:..\data\name.db'; // --WORKS--

$dsn = 'sqlite:name.db'; // --WORKS--

Hope it will save you some time in the future !

Solution 2

Just a small append to @justin answer:

You can also use the linux path style on windows:

$dsn = 'sqlite:c:/full/path/to/name.db';
Share:
12,567
Justin T.
Author by

Justin T.

web developer, mainly on LAMP stack. living in beautiful France :) SOreadytohelp

Updated on June 14, 2022

Comments

  • Justin T.
    Justin T. almost 2 years

    [ante-scriptum : this is a self answered question, you don't need to bother answering]

    I ran into a weird configuration problem, not documented anywhere on the specific PHP.net page or at StackOverflow.

    The problem

    When opening an existing sqlite database on Windows, the same error kept showing :

    SQLSTATE[HY000] [14] Unable To Open Database File

    Although the code executed was copy/pasted from the manual :

    <?php
    /* Connect to an ODBC database using driver invocation */
    $dsn = 'sqlite:/full/path/to/db';
    $user = 'dbuser';
    $password = 'dbpass';
    
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    
    ?>
    

    I could not open this database, as I had tried all kinds of various DSN while googling :

    $dsn = 'sqlite:/c:\\full\\path\\to\\db'; // --FAILED--

    $dsn = 'sqlite://c:/full/path/to/db'; // --FAILED--

  • dhobbs
    dhobbs over 7 years
    I don't know when it stopped, but it doesn't seem to work with relative paths any more (see docs).
  • user
    user almost 5 years
    @dhobbs, did you test it in practice? Relative paths work with PHP 5.4, despite the documentation was the same at the time.
  • dhobbs
    dhobbs almost 5 years
    @user, I did encounter the inability to use a relative path at that time, which is why I ended up commenting here, but I no longer have that project and don't remember all the details.