Consider this piece of code:
<?php
$db = new SQLiteDatabase("./crm.db", 0666, &$error)
or die("Failed: $error");
$create_query = "
CREATE TABLE document (
id INTEGER PRIMARY KEY,
title,
intro,
body
);
REATE TABLE dictionary (
id INTEGER PRIMARY KEY,
word
);
CREATE TABLE lookup (
document_id INTEGER,
word_id INTEGER,
position INTEGER
);
REATE UNIQUE INDEX word ON dictionary(word);
";
$ret = $db->query($create_query);
if ($db->lastError() != SQLITE_OK) {
echo $db->lastError();
}
?>
As you can see there are two typoes (REATE instead of CREATE) so
obviously I expected to get a result value other than SQLITE_OK back,
but that didn't happen, and no php warnings either. Then I fixed those
two typoes, ran the script and to my surprise it only showed the *first*
table in the database. Making a typo in the first create table statement
did throw a warning (unexpected when $ret = is used) and the return
value was set to SQLITE_ERROR.
After some investigation I found that if I removed the "$ret = " before
the query() call, then all queries are run just fine, and throw also a
warning when I put back in the typoes.
I would have expected something else though:
1. Without the "$ret = " it should throw a PHP warning for each broken
query. (That's current what it's doing).
2. With the "$ret = " it should NOT throw any warnings, and set the
$db->lastError() value accordingly whether there were errors or not.
In the code I do see that there is a check for if the return value is
used, so this behavior is possible and definitely wanted IMO. The
current behavior is just wrong and uninituitive.
regards,
Derick
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php