ID:               28264
 Updated by:       [EMAIL PROTECTED]
 Reported By:      csaba at alum dot mit dot edu
-Status:           Open
+Status:           Closed
 Bug Type:         SQLite related
 Operating System: Win 2K Pro
 PHP Version:      5CVS-2004-05-03 (dev)
 New Comment:

This is the 1st then. Can you now please leave this issue closed?
(won't fix)



Previous Comments:
------------------------------------------------------------------------

[2005-04-15 12:33:58] csaba at alum dot mit dot edu

That same comment goes on to say:
When executing multiple queries, the return value of this function will
be FALSE if there was an error, but undefined otherwise (it might be
TRUE for success or it might return a result handle).


Is this supposed to be like a Heisenberg uncertainty principle? - The
very action of testing for sqlite_query's return value causes the
multiple queries not to be executed.  Specifically, assigning the
return value to a variable (but otherwise not using it) or even an if
(sqlite_query(...)); will cause the multiple queries not to be
executed.  I have simplified my example to show this.

If you have already said earlier that the return value may not be used
upon pain of first SQL statement only being executed, I don't think it
makes sense to talk about the return value being FALSE or otherwise in
a multiple execution context.


<?php
$db = sqlite_open(':memory:', 0666, $sqliteerror);
$tbl = "delme";
$multiSQL = "CREATE TABLE $tbl (foo INTEGER PRIMARY KEY, bar TEXT);" .
            "INSERT INTO $tbl VALUES (null, 'Hi Mom');" .
            "INSERT INTO $tbl VALUES (null, 'Hi Dad');";

//$dbRes = sqlite_query ($db, $multiSQL);  // only creates table
if (sqlite_query ($db, $multiSQL));        // only creates table
//sqlite_query ($db, $multiSQL);           // inserts both rows

$insertTest = "SELECT * FROM $tbl;";
$aIT = sqlite_array_query ($db, $insertTest, SQLITE_ASSOC);
print "Number of rows now in table: " . sizeof($aIT);
?>


Csaba

PS.  This really is incongruous.  How many other PHP functions are
there where the act of assigning the function's return value causes a
difference in how the function has behaved?

------------------------------------------------------------------------

[2005-04-05 09:43:03] [EMAIL PROTECTED]

It's already documented:

sqlite_query:
"SQLite will execute multiple queries ... However, this works only when
the result of the function is not used - if it is used, only the first
SQL statement would be executed."

Changing back the state to "Closed SQLite".

------------------------------------------------------------------------

[2005-04-05 01:49:36] csaba at alum dot mit dot edu

It's unclear to me from the earlier comments that fixed means there is
another function which mostly does what this one is documented as
supposed to be doing (and today's earlier rejoinder is the the first
mention of sqlite_exec).  Nevertheless, I had tested with sqlite_exec
before submitting the report earlier today, and yes, it does do
multiple queries.


To me, fixed includes the documentation agreeing with observed
behaviour.  As I noted in the original report, the documentation for
sqlite_query says that SQLite will execute multiple queries.  If the
code isn't going to change, perhaps the documentation should. 
Therefore, I have reclassified the Category as 'Documentation problem'.

------------------------------------------------------------------------

[2005-04-05 01:19:18] [EMAIL PROTECTED]

It was fixed: You need to use sqlite_exec() instead of sqlite_query() 

(took about 2 minutes for me to figure out and I don't use SQLite at
all..)


------------------------------------------------------------------------

[2005-04-04 22:00:25] csaba at alum dot mit dot edu

This is still behaving in the same way as originally described (just
tested on PHP 5.0.4-dev 11-Mar-2005).  Here is slightly nicer code to
show the problem:

<?php
$db = sqlite_open(':memory:', 0666, $sqliteerror);
$tbl = "delme";
$multiQuery = "CREATE TABLE $tbl " .
              "(foo INTEGER PRIMARY KEY, bar TEXT);" .
              "INSERT INTO $tbl VALUES (null, 'Hi Mom');";
$dbRes = sqlite_query ($db, $multiQuery);
$creationTest = "PRAGMA table_info('$tbl');";
$insertTest = "SELECT * FROM $tbl;";
$acT = sqlite_array_query ($db, $creationTest, SQLITE_ASSOC);
print "<br><br>Table was created:<br>";
var_dump ($acT);
$aiT = sqlite_array_query ($db, $insertTest, SQLITE_ASSOC);
print "<br><br>";
if ($aiT)
{print "with rows:<br>"; var_dump ($aiT); }
else print "but nothing was inserted";
?>

Csaba

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/28264

-- 
Edit this bug report at http://bugs.php.net/?id=28264&edit=1

Reply via email to