]> granicus.if.org Git - php/commitdiff
MFB51: Fixed bug #35248 (sqlite_query() doesnt set error_msg when return
authorIlia Alshanetsky <iliaa@php.net>
Thu, 17 Nov 2005 14:40:11 +0000 (14:40 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 17 Nov 2005 14:40:11 +0000 (14:40 +0000)
value is being used).

ext/sqlite/sqlite.c
ext/sqlite/tests/bug35248.phpt [new file with mode: 0644]

index 5ecb0263e836a5af6fbaf862ef57ca9337c33e77..328e997fd2bd68bb2efbcc85256e5dc8071f5b3a 100644 (file)
@@ -1517,7 +1517,7 @@ next_row:
 /* }}} */
 
 /* {{{ sqlite_query */
-void sqlite_query(zval *object, struct php_sqlite_db *db, char *sql, long sql_len, int mode, int buffered, zval *return_value, struct php_sqlite_result **prres TSRMLS_DC)
+void sqlite_query(zval *object, struct php_sqlite_db *db, char *sql, long sql_len, int mode, int buffered, zval *return_value, struct php_sqlite_result **prres, zval *errmsg TSRMLS_DC)
 {
        struct php_sqlite_result res, *rres;
        int ret;
@@ -1533,6 +1533,9 @@ void sqlite_query(zval *object, struct php_sqlite_db *db, char *sql, long sql_le
 
        if (ret != SQLITE_OK) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
+               if (errmsg) {
+                       ZVAL_STRING(errmsg, errtext, 1);
+               }
                sqlite_freemem(errtext);
                goto terminate;
        } else if (!res.vm) { /* empty query */
@@ -1633,7 +1636,7 @@ PHP_FUNCTION(sqlite_unbuffered_query)
                return;
        }
 
-       sqlite_query(object, db, sql, sql_len, (int)mode, 0, return_value, NULL TSRMLS_CC);
+       sqlite_query(object, db, sql, sql_len, (int)mode, 0, return_value, NULL, errmsg TSRMLS_CC);
 }
 /* }}} */
 
@@ -1774,7 +1777,7 @@ PHP_FUNCTION(sqlite_query)
                return;
        }
 
-       sqlite_query(object, db, sql, sql_len, (int)mode, 1, return_value, NULL TSRMLS_CC);
+       sqlite_query(object, db, sql, sql_len, (int)mode, 1, return_value, NULL, errmsg TSRMLS_CC);
 }
 /* }}} */
 
@@ -2209,7 +2212,7 @@ PHP_FUNCTION(sqlite_array_query)
        }
        
        rres = (struct php_sqlite_result *)emalloc(sizeof(*rres));
-       sqlite_query(NULL, db, sql, sql_len, (int)mode, 0, NULL, &rres TSRMLS_CC);
+       sqlite_query(NULL, db, sql, sql_len, (int)mode, 0, NULL, &rres, NULL TSRMLS_CC);
        if (db->last_err_code != SQLITE_OK) {
                if (rres) {
                        efree(rres);
@@ -2342,7 +2345,7 @@ PHP_FUNCTION(sqlite_single_query)
        }
 
        rres = (struct php_sqlite_result *)emalloc(sizeof(*rres));
-       sqlite_query(NULL, db, sql, sql_len, PHPSQLITE_NUM, 0, NULL, &rres TSRMLS_CC);
+       sqlite_query(NULL, db, sql, sql_len, PHPSQLITE_NUM, 0, NULL, &rres, NULL TSRMLS_CC);
        if (db->last_err_code != SQLITE_OK) {
                if (rres) {
                        efree(rres);
diff --git a/ext/sqlite/tests/bug35248.phpt b/ext/sqlite/tests/bug35248.phpt
new file mode 100644 (file)
index 0000000..4898a41
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Bug #35248 (sqlite_query does not return parse error message)
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip"; ?>
+--FILE--
+<?php
+       $db = sqlite_open(":memory:");
+       $res = @sqlite_query($db, "asdfesdfa", SQLITE_NUM, $err);
+       var_dump($err);
+       $res = @sqlite_unbuffered_query($db, "asdfesdfa", SQLITE_NUM, $err);
+       var_dump($err);
+?>
+--EXPECT--
+string(30) "near "asdfesdfa": syntax error"
+string(30) "near "asdfesdfa": syntax error"