|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-08-01 00:50 UTC] hugo_pl at users dot sourceforge dot net
Description:
------------
When I call the function:
sqlite_fetch_column_types(...);
or the method:
fetchColumnTypes(...);
of the SQLiteDatabase Object, the entire database is locked forever... and I cant modify the database until Apache is restarted.
I tested this with Apache2 SAPI module, and SQLite version 2.8.14 on win32 and 2.8.13 and 2.8.14 on Linux.
In all plataforms, the database is unlocked only when I restart Apache, if I never call sqlite_fetch_column_types or the method fetchColumnTypes, all runs Ok.
P.S.: English is not my natural language.
Reproduce code:
---------------
<?php
// Open a database file...
$db = sqlite_open('test.db');
sqlite_busy_timeout($db, 1000);
//! Uncomment this line to see the bug!!
//sqlite_fetch_column_types($db, 'papers');
sqlite_query($db, 'select * from papers limit 10');
// Any Update query and kabbom... =/
sqlite_query($db, 'update papers set papel="Hi" where id=1');
sqlite_close($db);
?>
Expected result:
----------------
No warnings about a locked database when I send the update query
Actual result:
--------------
Warning: sqlite_query() [function.sqlite-query]: database is locked...
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 12:00:01 2025 UTC |
Hi I think that this is a PHP bug, I made a better exemple to show this bug: <pre> <?php try { $db = new SQLiteDatabase('./test.db'); $db->busyTimeout(1000); // table exists? $exists = $db->singleQuery('SELECT count(*) FROM sqlite_master WHERE tbl_name=\'bugtest\''); if (!$exists) $db->query('CREATE TABLE bugtest (a, b, c, d);'); // Without this line all runs Ok. $db->fetchColumnTypes('bugtest'); $db->query('INSERT INTO bugtest VALUES (1, 2, 3, 4)'); echo 'Res: <br>'; print_r( $db->arrayQuery('SELECT * FROM bugtest', SQLITE_ASSOC) ); } catch (Exception $e) { echo 'Exception: ', $e->getMessage(); } ?> The first time you run this script all appear to be Ok... the insert query is executed, etc... but the second time is displayed a message: Warning: SQLiteDatabase::query() [function.query]: database is locked in /home/hugo/public_html/phpbug.php on line 16 Nothing is wrong with the script, if this message appear something is wrong with PHP.... on windows the same bug occur, then it is not a problem from SQLite or Apache compiled by me under linux.This is still a problem in PHP 5.1.0RC5-dev. here is my reproduction code: ---------------------------- $database_path = "sqlite_db1"; $db = new SQLiteDatabase($database_path); // sqlite_db1 has a table called t1 with the colums id (int) and stuff (text) // $db->query("INSERT INTO t1 (stuff) VALUES ('something');", SQLITE_NUM, $db_error); print $db->changes() ." rows affected<br>\n"; //-----// This is the part that breaks it //-----// $table_cols = $db->fetchColumnTypes("t1", SQLITE_ASSOC); foreach($table_cols as $col => $type) { print"\t$col: $type<br>\n"; } //-------------------------------------------------// $db->query("INSERT INTO t1 (stuff) VALUES ('something');", SQLITE_NUM, $db_error); print $db->changes() ." rows affected<br>\n";