From: Georg Richter Date: Sat, 8 Oct 2005 15:08:07 +0000 (+0000) Subject: fix for bug 34785: X-Git-Tag: php-5.1.0RC2~69 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7357ac0b968bb338bddfc47ae6ffe51e012f41e7;p=php fix for bug 34785: added support for parent::__construct (mysqli_statement and mysqli_resultset) fixed failed testcases when sql_mode is in effect --- diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index ce7b12dcd5..436cc3ccef 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -143,25 +143,23 @@ static void mysqli_objects_destroy_object(void *object, zend_object_handle handl if (instanceof_function(intern->zo.ce, mysqli_link_class_entry TSRMLS_CC)) { if (my_res && my_res->ptr) { MY_MYSQL *mysql = (MY_MYSQL *)my_res->ptr; - if (mysql->mysql) { mysql_close(mysql->mysql); } - php_clear_mysql(mysql); efree(mysql); - my_res->ptr = NULL; } - } else if (intern->zo.ce == mysqli_stmt_class_entry) { /* stmt object */ + } else if (instanceof_function(intern->zo.ce, mysqli_stmt_class_entry TSRMLS_CC)) { /* stmt object */ if (my_res && my_res->ptr) { - php_clear_stmt_bind((MY_STMT *)my_res->ptr); + MY_STMT *stmt = (MY_STMT *)my_res->ptr; + php_clear_stmt_bind(stmt); } - } else if (intern->zo.ce == mysqli_result_class_entry) { /* result object */ + } else if (instanceof_function(intern->zo.ce, mysqli_result_class_entry TSRMLS_CC)) { /* stmt object */ if (my_res && my_res->ptr) { mysql_free_result(my_res->ptr); } - } else if (intern->zo.ce == mysqli_warning_class_entry) { /* warning object */ + } else if (instanceof_function(intern->zo.ce, mysqli_warning_class_entry TSRMLS_CC)) { /* stmt object */ if (my_res && my_res->ptr) { php_clear_warnings((MYSQLI_WARNING *)my_res->info); } diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index 043d74f262..49fe2380c8 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -244,6 +244,7 @@ function_entry mysqli_link_methods[] = { * Every user visible function must have an entry in mysqli_result_functions[]. */ function_entry mysqli_result_methods[] = { + PHP_FALIAS(mysqli_result, mysqli_result_construct, NULL) PHP_FALIAS(close,mysqli_free_result,NULL) PHP_FALIAS(free,mysqli_free_result,NULL) PHP_FALIAS(data_seek,mysqli_data_seek,NULL) @@ -266,6 +267,7 @@ function_entry mysqli_result_methods[] = { * Every user visible function must have an entry in mysqli_stmt_functions[]. */ function_entry mysqli_stmt_methods[] = { + PHP_FALIAS(mysqli_stmt, mysqli_stmt_construct, NULL) PHP_FALIAS(attr_get,mysqli_stmt_attr_get,NULL) PHP_FALIAS(attr_set,mysqli_stmt_attr_set,NULL) PHP_FALIAS(bind_param,mysqli_stmt_bind_param,second_arg_force_by_ref_rest) diff --git a/ext/mysqli/tests/003.phpt b/ext/mysqli/tests/003.phpt index d043dc7724..28aedb032c 100644 --- a/ext/mysqli/tests/003.phpt +++ b/ext/mysqli/tests/003.phpt @@ -7,9 +7,9 @@ mysqli connect include "connect.inc"; /*** test mysqli_connect 127.0.0.1 ***/ - $link = mysqli_connect($host, $user, $passwd); + $link = mysqli_connect($host, $user, $passwd, "test"); - mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result"); mysqli_query($link,"CREATE TABLE test_bind_result(c1 date, c2 time, diff --git a/ext/mysqli/tests/006.phpt b/ext/mysqli/tests/006.phpt index 4b495cc594..a53ad7a547 100644 --- a/ext/mysqli/tests/006.phpt +++ b/ext/mysqli/tests/006.phpt @@ -10,6 +10,7 @@ mysqli fetch long values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned, diff --git a/ext/mysqli/tests/007.phpt b/ext/mysqli/tests/007.phpt index 503863bdc2..cb32033cca 100644 --- a/ext/mysqli/tests/007.phpt +++ b/ext/mysqli/tests/007.phpt @@ -10,6 +10,7 @@ mysqli fetch short values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned, diff --git a/ext/mysqli/tests/008.phpt b/ext/mysqli/tests/008.phpt index 12311d621b..9fc01b8adf 100644 --- a/ext/mysqli/tests/008.phpt +++ b/ext/mysqli/tests/008.phpt @@ -10,6 +10,7 @@ mysqli fetch tinyint values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 tinyint, diff --git a/ext/mysqli/tests/009.phpt b/ext/mysqli/tests/009.phpt index 091313870f..0647a8e140 100644 --- a/ext/mysqli/tests/009.phpt +++ b/ext/mysqli/tests/009.phpt @@ -16,6 +16,7 @@ mysqli fetch bigint values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 bigint default 5, @@ -53,7 +54,7 @@ array(7) { [4]=> int(0) [5]=> - string(13) "-333333333333" + int(0) [6]=> int(100) } diff --git a/ext/mysqli/tests/010.phpt b/ext/mysqli/tests/010.phpt index 0d74bed501..6b79d62f42 100644 --- a/ext/mysqli/tests/010.phpt +++ b/ext/mysqli/tests/010.phpt @@ -12,6 +12,7 @@ precision=12 $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); diff --git a/ext/mysqli/tests/020.phpt b/ext/mysqli/tests/020.phpt index 85834c52af..4ae140f620 100644 --- a/ext/mysqli/tests/020.phpt +++ b/ext/mysqli/tests/020.phpt @@ -10,6 +10,7 @@ mysqli bind_param/bind_result date $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result"); mysqli_query($link,"CREATE TABLE test_bind_result(c1 date, c2 time, diff --git a/ext/mysqli/tests/023.phpt b/ext/mysqli/tests/023.phpt index 69e9b20858..24a717a6eb 100644 --- a/ext/mysqli/tests/023.phpt +++ b/ext/mysqli/tests/023.phpt @@ -10,6 +10,7 @@ mysqli bind_param/bind_prepare fetch long values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned, diff --git a/ext/mysqli/tests/024.phpt b/ext/mysqli/tests/024.phpt index c6d6cd7e70..f0d0a6407a 100644 --- a/ext/mysqli/tests/024.phpt +++ b/ext/mysqli/tests/024.phpt @@ -10,6 +10,7 @@ mysqli bind_param/bind_result short values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned, diff --git a/ext/mysqli/tests/025.phpt b/ext/mysqli/tests/025.phpt index 85ff0fa29f..f3338cf467 100644 --- a/ext/mysqli/tests/025.phpt +++ b/ext/mysqli/tests/025.phpt @@ -10,6 +10,7 @@ mysqli bind_param/bind_result tinyint values $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 tinyint, diff --git a/ext/mysqli/tests/026.phpt b/ext/mysqli/tests/026.phpt index 0f9e882608..d38e3c1807 100644 --- a/ext/mysqli/tests/026.phpt +++ b/ext/mysqli/tests/026.phpt @@ -10,6 +10,7 @@ mysqli bind_param/bind_result with send_long_data $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 varchar(10), c2 text)"); diff --git a/ext/mysqli/tests/042.phpt b/ext/mysqli/tests/042.phpt index fe6d23e172..719e24925d 100644 --- a/ext/mysqli/tests/042.phpt +++ b/ext/mysqli/tests/042.phpt @@ -10,6 +10,7 @@ mysqli_fetch_object $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"); mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned, diff --git a/ext/mysqli/tests/060.phpt b/ext/mysqli/tests/060.phpt index 875130dc55..ba6c231c57 100644 --- a/ext/mysqli/tests/060.phpt +++ b/ext/mysqli/tests/060.phpt @@ -16,6 +16,7 @@ mysqli_fetch_object with classes $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); mysqli_query($link,"DROP TABLE IF EXISTS test_fetch"); mysqli_query($link,"CREATE TABLE test_fetch(c1 smallint unsigned, diff --git a/ext/mysqli/tests/065.phpt b/ext/mysqli/tests/065.phpt index d0fa071169..09ee886ec5 100644 --- a/ext/mysqli/tests/065.phpt +++ b/ext/mysqli/tests/065.phpt @@ -12,6 +12,7 @@ if (!function_exists('mysqli_set_charset')) { include "connect.inc"; $mysql = new mysqli($host, $user, $passwd); + mysqli_query($mysql, "SET sql_mode=''"); $esc_str = chr(0xbf) . chr(0x5c); diff --git a/ext/mysqli/tests/bug32405.phpt b/ext/mysqli/tests/bug32405.phpt index 9b58e3611b..f805dc7982 100644 --- a/ext/mysqli/tests/bug32405.phpt +++ b/ext/mysqli/tests/bug32405.phpt @@ -9,6 +9,7 @@ Bug #32405 /*** test mysqli_connect 127.0.0.1 ***/ $link = mysqli_connect($host, $user, $passwd); mysqli_select_db($link, "test"); + mysqli_query($link, "SET sql_mode=''"); /* two fields are needed. the problem does not occur with 1 field only selected. */ $link->query("CREATE TABLE test_users(user_id int(10) unsigned NOT NULL auto_increment, login varchar(50) default '', PRIMARY KEY (user_id))"); diff --git a/ext/mysqli/tests/bug34785.phpt b/ext/mysqli/tests/bug34785.phpt new file mode 100644 index 0000000000..a2b9f22881 --- /dev/null +++ b/ext/mysqli/tests/bug34785.phpt @@ -0,0 +1,47 @@ +--TEST-- +Bug #32405 +--SKIPIF-- + +--FILE-- +execute(); + $stmt->bind_result($var); + $stmt->fetch(); + + $stmt->close(); + var_dump($var); + + mysqli_real_query($link, "SELECT 'bar' FROM DUAL"); + $result = new my_result($link, MYSQLI_STORE_RESULT); + $row = $result->fetch_row(); + $result->close(); + + var_dump($row[0]); + + mysqli_close($link); +?> +--EXPECT-- +string(3) "foo" +string(3) "bar"