]> granicus.if.org Git - php/commitdiff
mysqli: Promote warning in field_seek
authorDharman <tekiela246@gmail.com>
Wed, 16 Sep 2020 14:41:02 +0000 (15:41 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 17 Sep 2020 07:42:42 +0000 (09:42 +0200)
Aligning the behaviour of fetch_field and field_seek.

ext/mysqli/mysqli_api.c
ext/mysqli/tests/mysqli_field_seek.phpt
ext/mysqli/tests/mysqli_field_tell.phpt

index e949053af0a40a71674ee26a32e91b3ce43544b3..3af7654733bf822fe82c34b7a20851da9ca84798 100644 (file)
@@ -1286,9 +1286,8 @@ PHP_FUNCTION(mysqli_field_seek)
        MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID);
 
        if ((uint32_t)fieldnr >= mysql_num_fields(result)) {
-               // TODO ValueError?
-               php_error_docref(NULL, E_WARNING, "Invalid field offset");
-               RETURN_FALSE;
+               zend_argument_value_error(ERROR_ARG_POS(2), "must be less than the number of fields for this result set");
+               RETURN_THROWS();
        }
 
        mysql_field_seek(result, fieldnr);
index bcc1e29526c54568c31d7fc37c89f26b1fe215c9..d4f160deb080bbfc74cb983ff26960f9cd5a54c9 100644 (file)
@@ -92,7 +92,11 @@ require_once('skipifconnectfailure.inc');
     }
 
     var_dump(mysqli_field_tell($res));
-    var_dump(mysqli_field_seek($res, 2));
+    try {
+        var_dump(mysqli_field_seek($res, 2));
+    } catch (\ValueError $e) {
+        echo $e->getMessage() . \PHP_EOL;
+    }
     var_dump(mysqli_fetch_field($res));
 
     mysqli_free_result($res);
@@ -207,9 +211,7 @@ object(stdClass)#%d (13) {
   int(0)
 }
 int(2)
-
-Warning: mysqli_field_seek(): Invalid field offset in %s on line %d
-bool(false)
+mysqli_field_seek(): Argument #2 ($field_nr) must be less than the number of fields for this result set
 bool(false)
 bool(true)
 object(stdClass)#%d (13) {
index e8c344ec956ff156bdfcc3f29812d03b797a13d1..1a2be4d70c2c164d451f1d436d634666f63dd04d 100644 (file)
@@ -21,7 +21,11 @@ require_once('skipifconnectfailure.inc');
     var_dump(mysqli_fetch_field($res));
     var_dump(mysqli_field_tell($res));
 
-    var_dump(mysqli_field_seek($res, 2));
+    try {
+        var_dump(mysqli_field_seek($res, 2));
+    } catch (\ValueError $e) {
+        echo $e->getMessage() . \PHP_EOL;
+    }
     var_dump(mysqli_field_tell($res));
 
     try {
@@ -85,9 +89,7 @@ object(stdClass)#%d (13) {
 }
 bool(false)
 int(1)
-
-Warning: mysqli_field_seek(): Invalid field offset in %s on line %d
-bool(false)
+mysqli_field_seek(): Argument #2 ($field_nr) must be less than the number of fields for this result set
 int(1)
 mysqli_field_seek(): Argument #2 ($field_nr) must be greater than or equal to 0
 int(1)