From:             hugo dot pl at gmail dot com
Operating system: Linux
PHP version:      5.0.2
PHP Bug Type:     SQLite related
Bug description:  SQLite OO interface with Exceptions (patch included)

Description:
------------
Hi, (english is not my natural language)

I'm sending a patch to SQLite module (is here the right place to do it?).

It's add Exceptions to OO interface of SQLite module when a error occur
executing a query.

Affected methods:
query()
singleQuery()
unbufferedQuery()
arrayQuery()

If any error occur when executing the query a exception of type
SQLiteException is throw. The message of the exeception is the same
returned from SQLite, library (description of the sql error).

I made this patch because I'm doing a frontend to SQLite and I need
descriptive message about errors on SQL queries and I can't find how to
catch the query syntax error messages trowed by SQLite library (actually
this messages are only show in warning messages).

Ex.:

If a do the query:
$db->query("SELECT FROM anytable");

I cant catch the SQLite message saying that exists a syntax error near
"FROM anytable"... with tha actual interface I can get only the generic
message "SQL logic error or missing database" returned by
sqlite_error_string(sqlite_last_error()).


I think that the function sqlite_last_error() should return a error string
like mysql_error(), not a error code, because the error string returned by
sqlite_error_string is not too usefull,

I'm send the fle ext/sqlite/sqlite.c with modification based on PHP-5.0.2,
if anyone accept this patch, nice, will be my first patch, otherwise I wish
at least hear another ideia to solve the "problem".

Reproduce code:
---------------
<pre>
<?php

// Patch test-case

// our bugged query
$query = 'SELASDF sdaF SDaf ';

// Test OO interface (all *query methods must trow a exception)
$db = new SQLiteDatabase("teste.db");
$aMethods = array('query', 'singleQuery', 'unbufferedQuery',
'arrayQuery');
$n = count($aMethods);

echo "Testing OO interface...\n";
foreach ($aMethods as $method)
{
        try
        {
                eval('@$db->'.$method.'($query);');
                echo '$db::', $method, "(); // fail!\n";
        }
        catch (SQLiteException $e)
        {
                echo '$db::', $method, "(); // Ok!\n";
        }
        try
        {
                eval('$r = @$db->'.$method.'($query);');
                echo '$r = $db::', $method, "(); // fail!\n";
        }
        catch (SQLiteException $e)
        {
                echo '$r = $db::', $method, "(); // Ok!\n";
        }
}
echo "All done.... :)\n";

?>

Expected result:
----------------
Testing OO interface...
$db::query(); // Ok!
$r = $db::query(); // Ok!
$db::singleQuery(); // Ok!
$r = $db::singleQuery(); // Ok!
$db::unbufferedQuery(); // Ok!
$r = $db::unbufferedQuery(); // Ok!
$db::arrayQuery(); // Ok!
$r = $db::arrayQuery(); // Ok!
All done.... :)


Actual result:
--------------
Testing OO interface...
$db::query(); // fail!
$r = $db::query(); // fail!
$db::singleQuery(); // fail!
$r = $db::singleQuery(); // fail!
$db::unbufferedQuery(); // fail!
$r = $db::unbufferedQuery(); // fail!
$db::arrayQuery(); // fail!
$r = $db::arrayQuery(); // fail!
All done.... :)


-- 
Edit bug report at http://bugs.php.net/?id=31342&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=31342&r=trysnapshot4
Try a CVS snapshot (php5.0): 
http://bugs.php.net/fix.php?id=31342&r=trysnapshot50
Try a CVS snapshot (php5.1): 
http://bugs.php.net/fix.php?id=31342&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=31342&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=31342&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=31342&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=31342&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=31342&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=31342&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=31342&r=notwrong
Not enough info:             
http://bugs.php.net/fix.php?id=31342&r=notenoughinfo
Submitted twice:             
http://bugs.php.net/fix.php?id=31342&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=31342&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=31342&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=31342&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=31342&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=31342&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=31342&r=float
No Zend Extensions:          http://bugs.php.net/fix.php?id=31342&r=nozend
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=31342&r=mysqlcfg

Reply via email to