From f5608e07980b9d328691adb9fbb70cb912bce19e Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Thu, 17 Nov 2005 14:40:11 +0000 Subject: [PATCH] MFB51: Fixed bug #35248 (sqlite_query() doesnt set error_msg when return value is being used). --- ext/sqlite/sqlite.c | 13 ++++++++----- ext/sqlite/tests/bug35248.phpt | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 ext/sqlite/tests/bug35248.phpt diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c index 5ecb0263e8..328e997fd2 100644 --- a/ext/sqlite/sqlite.c +++ b/ext/sqlite/sqlite.c @@ -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 index 0000000000..4898a4142e --- /dev/null +++ b/ext/sqlite/tests/bug35248.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #35248 (sqlite_query does not return parse error message) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +string(30) "near "asdfesdfa": syntax error" +string(30) "near "asdfesdfa": syntax error" -- 2.40.0