]> granicus.if.org Git - php/commitdiff
Fix #47438 mysql_fetch_field ignores zero offse
authorJohannes Schlüter <johannes@php.net>
Wed, 18 Feb 2009 16:33:28 +0000 (16:33 +0000)
committerJohannes Schlüter <johannes@php.net>
Wed, 18 Feb 2009 16:33:28 +0000 (16:33 +0000)
ext/mysql/php_mysql.c
ext/mysql/tests/bug47438.phpt [new file with mode: 0644]

index 7fe228ea304f3622712b163250d754bc51a3784c..2f17e61ca6d07d56c98b9293e7d71e33d3dca985 100644 (file)
@@ -2379,7 +2379,7 @@ PHP_FUNCTION(mysql_fetch_field)
        
        ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, &result, -1, "MySQL result", le_result);
 
-       if (field) {
+       if (ZEND_NUM_ARGS() > 1) {
                if (field<0 || field>=(int)mysql_num_fields(mysql_result)) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad field offset");
                        RETURN_FALSE;
diff --git a/ext/mysql/tests/bug47438.phpt b/ext/mysql/tests/bug47438.phpt
new file mode 100644 (file)
index 0000000..b646b9b
--- /dev/null
@@ -0,0 +1,39 @@
+--TEST--
+Bug #47438 mysql_fetch_field ignores zero offset
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+require_once('connect.inc');
+
+if (!$link = my_mysql_connect($host, $user, $passwd, $db, $port, $socket))
+        printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
+                $host, $user, $db, $port, $socket);
+
+mysql_connect("localhost", "root", "");
+mysql_select_db("test");
+mysql_query("DROP TABLE IF EXISTS test_47438");
+mysql_query("CREATE TABLE test_47438 (a INT, b INT, c INT)");
+mysql_query("INSERT INTO test_47438 VALUES (10, 11, 12), (20, 21, 22)"); 
+$result = mysql_query("SELECT * FROM test_47438");
+mysql_field_seek($result, 1);
+
+$i = 0;
+
+while($i<mysql_num_fields($result))
+{
+  $meta=mysql_fetch_field($result,$i);
+  echo $i . "." . $meta->name . "\n";
+  $i++;
+}
+
+mysql_query("DROP TABLE IF EXISTS test_47438");
+
+?>
+--EXPECT--
+0.a
+1.b
+2.c