Hey there,
I've double-checked on three different machines now, and I'm always
getting the same error. All having different versions of PHP,
Apache, PDO and SQLite. So I figure it must be something that I'm
doing wrong. I just can't figure out what it is - and I'm puzzled
because I had used SQLite before (although briefly) and don't think
I'm doing anything different than before.
Anyway, here's what I'm doing, step-by-step:
# sqlite3 frontend.db
Here I insert the following SQL script:
CREATE TABLE website (
website_id INTEGER PRIMARY KEY,
always_expand INTEGER
);
CREATE TABLE page (
page_id INTEGER NOT NULL PRIMARY KEY,
parent_id INTEGER,
website_id INTEGER NOT NULL,
title TEXT,
link TEXT,
depth INTEGER,
visible INTEGER,
element_id INTEGER,
nav_path TEXT,
protected INTEGER,
sort_order INTEGER
);
Then I exit the client and make the PHP script:
# nano test.php
The content of the script still being that of my original message.
Then I adjust the rights:
# chown apache:apache frontend.db
# chmod 777 frontend.db
Then I execute the script on the command line:
# php test.php
No error.
Then I call the script on the website, one of the examples being:
http://www.21st.de/test.php
The script still manages to open the database and do a SELECT query,
but throws the said exception when trying to do the DELETE statement.
These are all the steps that are involved to reproduce the error on
three machines. No more, no less. Now, have I overlooked anything?
Am I missing something really, really stupid? Or is it some kind of
a bug? But certainly that could not have gone unnoticed for so long?
(Tested on PHP versions 5.1.4, 5.2.0 and 5.2.4).
CU
Markus
Markus Wolff - NorthClick schrieb:
Hey there,
I'm trying to open an SQLite3 database from a PHP very simple PHP
script:
$db = dirname(__FILE__).'/frontend.db';
$pdo = new PDO('sqlite:'.$db);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->query("SELECT * FROM page LIMIT 1");
echo "Deleting pages\n"; $pdo->query("DELETE FROM page");
echo "Deleting websites\n";
$pdo->query("DELETE FROM website");
The database file contains no data whatsoever, just the table
definitions (in case you were wondering, this is a stripped-down
version
of a larger script for debugging purposes, hence the seemingly idiotic
DELETE statements that won't do any good in an empty database anyway,
but I digress...).
When executed on the command line, this works perfectly. When I
execute
the same script via Apache and mod_php, I'm getting this exception:
PDOException: SQLSTATE[HY000]: General error: 1 SQL logic error or
missing database in /home/mwolff/webs/markus/cms/test.php on line 8
Getting experimental, I've tried to change the calls for the DELETE
statements from $pdo->query() to $pdo->exec(), just to see what
happens.
Well, what happens is that I'm getting a different error:
PDOException: SQLSTATE[HY000]: General error: 14 unable to open
database
file in /home/mwolff/webs/markus/cms/test.php on line 6
Argh... what can possibly be wrong here? The script works from the
commandline, with the exact same PHP version (Debian package, PHP
5.2.0-8+etch7, and we also tried upgrading to the latest Debian
package
of 5.2.4, to no avail).
It can't be file permissions, I've even tried to set the database file
to 777... no change at all.
Does this ring a bell with anyone here?
Thanks,
Markus