tags:

views:

198

answers:

2

I am able to retrieve information from a SQLite database in PHP, but not write to it. For example, this code works perfectly fine:

$db = new PDO("sqlite:foo.db");
$rowCount = $db->query("SELECT COUNT(*) FROM tblname;")->fetchColumn(0);
echo $rowCount; // works as it should

However, the following snippet results in an, 'unable to open database file' error:

$db = new PDO("sqlite:foo.db");
$db->exec("INSERT INTO tblname VALUES(NULL, 'val1', 'val2');") or die(print_r($db->errorInfo(), true));

When I perform the above INSERT from the command line rather than in PHP, I get the expected results (a new row in tblname):

$ sqlite3 foo.db
sqlite> INSERT INTO tblname VALUES(NULL, 'val1', 'val2');

This is my first time using PDOs (or SQLite for that matter) so any help would be greatly appreciated.

+4  A: 

Check that the user running the PHP script has permission to write foo.db.

Also (from memory, correct me if I'm wrong) the user will need write permission on the directory containing foo.db, or else SQLite3 will throw a not-so-useful error message.

oops
I made sure the database and the directory it resides in are both writable but that didn't seem to change anything.
Richard Marquez
Try using an absolute path to foo.db in your code, just to rule out any working directory differences that may be happening...
oops
"Check that the user running the PHP script..." That was the problem. My normal user was the one with write permissions, not the user that was actually running the script. Thanks.
Richard Marquez
A: 

You probobly have no write acccess to the sqllite file. Check the error message you get form PDO with PDO::errorInfo

NA