]> granicus.if.org Git - php/commitdiff
fix for bug 34785:
authorGeorg Richter <georg@php.net>
Sat, 8 Oct 2005 15:08:07 +0000 (15:08 +0000)
committerGeorg Richter <georg@php.net>
Sat, 8 Oct 2005 15:08:07 +0000 (15:08 +0000)
  added support for parent::__construct (mysqli_statement and mysqli_resultset)
  fixed failed testcases when sql_mode is in effect

18 files changed:
ext/mysqli/mysqli.c
ext/mysqli/mysqli_fe.c
ext/mysqli/tests/003.phpt
ext/mysqli/tests/006.phpt
ext/mysqli/tests/007.phpt
ext/mysqli/tests/008.phpt
ext/mysqli/tests/009.phpt
ext/mysqli/tests/010.phpt
ext/mysqli/tests/020.phpt
ext/mysqli/tests/023.phpt
ext/mysqli/tests/024.phpt
ext/mysqli/tests/025.phpt
ext/mysqli/tests/026.phpt
ext/mysqli/tests/042.phpt
ext/mysqli/tests/060.phpt
ext/mysqli/tests/065.phpt
ext/mysqli/tests/bug32405.phpt
ext/mysqli/tests/bug34785.phpt [new file with mode: 0644]

index ce7b12dcd516b5f61be949b82ec1eea7fee97dab..436cc3ccef7b956b915678a054c5097917d00b14 100644 (file)
@@ -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);
                }
index 043d74f26230d8742dd0a0d21d1851c86dcddb86..49fe2380c80b7d25334d773047e9742ee0a958b1 100644 (file)
@@ -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)
index d043dc7724f61d1487ea562f9a42fe21696c8de1..28aedb032cf872a201efaeb12014b2532a2fc3c0 100644 (file)
@@ -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, 
index 4b495cc5945129b0a5396d0594a8480444e0a219..a53ad7a54723d4dca7d9391eaebe07cf7a865138 100644 (file)
@@ -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,
index 503863bdc2c05580851200f999e5cbf0481ce593..cb32033ccaecb0f6a52209dcfdfea949644eb306 100644 (file)
@@ -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,
index 12311d621b977644075300eeed05fd438d859b9d..9fc01b8adf0889ea656a6d2748af1bca6df8fe75 100644 (file)
@@ -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,
index 091313870fd3e982e683a454255432646f1dcaa6..0647a8e1400683df9b33cffd08167ff93f5e8966 100644 (file)
@@ -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)
 }
index 0d74bed501c7c9e5d6c1e41bc6cd10f42ae5dba5..6b79d62f42289d8d6a8bef476596d10e2558d73f 100644 (file)
@@ -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");
 
index 85834c52afc03a2b78a96bf0c9cc069b2cc2637b..4ae140f620ad6c0f6825e7ab9e8e113a8590caa1 100644 (file)
@@ -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, 
index 69e9b20858c3bcd5bf15045fe2571b5b6f641775..24a717a6eb4d5666bd6d3dde6105c1f88a3669f0 100644 (file)
@@ -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,
index c6d6cd7e70247e987371a340b09cb82b05cc85b9..f0d0a6407acccad04361017cca838498f15273b1 100644 (file)
@@ -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,
index 85ff0fa29fe1c3a7b546b7ccb7d9e073f2de0b15..f3338cf4671197164b38503cf732a218ff420939 100644 (file)
@@ -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,
index 0f9e882608860ee7d96a3c59b4c3f1b886a4c91a..d38e3c1807591829c4fef71fbe1e964db996524b 100644 (file)
@@ -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)");
index fe6d23e172afe0441ba44f146effa6be13724262..719e24925d0114f99dd1b6c5167672ec53f609f1 100644 (file)
@@ -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,
index 875130dc55507f53210844153e39b7d99f35758c..ba6c231c57e656bb483857dabebc0ffca764ca17 100644 (file)
@@ -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,
index d0fa071169eaaba62baabb5a28b1445d4a55b12b..09ee886ec5701ed616dd7d6367a2554eb8cbd963 100644 (file)
@@ -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);
 
index 9b58e3611bfc2d7398f15388e109da2803457d5f..f805dc79825a719f92e4a51e3a58196266e2057c 100644 (file)
@@ -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 (file)
index 0000000..a2b9f22
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+Bug #32405
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+       include ("connect.inc");
+
+       class my_stmt extends mysqli_stmt
+       {
+               public function __construct($link, $query) {
+                       parent::__construct($link, $query);
+               }
+       }
+
+       class my_result extends mysqli_result
+       {
+               public function __construct($link, $query) {
+                       parent::__construct($link, $query);
+               }
+       }
+
+       /*** test mysqli_connect 127.0.0.1 ***/
+       $link = mysqli_connect($host, $user, $passwd);
+       mysqli_query($link, "SET sql_mode=''");
+
+       $stmt = new my_stmt($link, "SELECT 'foo' FROM DUAL");
+
+       $stmt->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"