From 69abffd1eee2fd4913dd6e3fe06f094cddc19ffb Mon Sep 17 00:00:00 2001 From: Calvin Buckley Date: Tue, 27 Jan 2026 14:33:35 -0400 Subject: [PATCH 1/3] Finish deprecation of $row < 0 odbc_fetch_row was changed to have $row be nullable and null by default instead of using 0, but still accepted 0 due to old code being explicit. Remove that special handling. See GH-13910. This should be merged if it passes in the 8.6 deprecations RFC. --- ext/odbc/php_odbc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 90ccb8af1ed1d..c1f1dd03fa225 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -1342,11 +1342,8 @@ static void php_odbc_fetch(INTERNAL_FUNCTION_PARAMETERS, bool return_array, php_ result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); - /* TODO deprecate $row argument values less than 1 after PHP 8.4 - * for functions other than odbc_fetch_row (see GH-13910) - */ - if (!result_type && !pv_row_is_null && pv_row < 1) { - php_error_docref(NULL, E_WARNING, "Argument #3 ($row) must be greater than or equal to 1"); + if (!pv_row_is_null && pv_row < 1) { + php_error_docref(NULL, E_WARNING, "Last argument ($row) must be greater than or equal to 1"); RETURN_FALSE; } From 3624b97f55814a6c4e9f0e2255eb7b144e60f952 Mon Sep 17 00:00:00 2001 From: Calvin Buckley Date: Tue, 27 Jan 2026 16:28:43 -0400 Subject: [PATCH 2/3] Update warning description, change default value in tests When we're testing the error, change to match the updated description, when we're testing the default case, update from 0->1. --- ext/odbc/tests/odbc_fetch_array_001.phpt | 2 +- ext/odbc/tests/odbc_fetch_into_001.phpt | 2 +- ext/odbc/tests/odbc_fetch_object_001.phpt | 2 +- ext/odbc/tests/odbc_fetch_row_001.phpt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/odbc/tests/odbc_fetch_array_001.phpt b/ext/odbc/tests/odbc_fetch_array_001.phpt index bf13ed25e4d64..fb72ac19565d8 100644 --- a/ext/odbc/tests/odbc_fetch_array_001.phpt +++ b/ext/odbc/tests/odbc_fetch_array_001.phpt @@ -17,7 +17,7 @@ odbc_exec($conn, 'INSERT INTO fetch_array VALUES (1), (2)'); $res = odbc_exec($conn, 'SELECT * FROM fetch_array'); var_dump(odbc_fetch_array($res)); -var_dump(odbc_fetch_array($res, 0)); +var_dump(odbc_fetch_array($res)); var_dump(odbc_fetch_array($res, 2)); var_dump(odbc_fetch_array($res, 4)); diff --git a/ext/odbc/tests/odbc_fetch_into_001.phpt b/ext/odbc/tests/odbc_fetch_into_001.phpt index 19f7f79268c58..de57991a1c216 100644 --- a/ext/odbc/tests/odbc_fetch_into_001.phpt +++ b/ext/odbc/tests/odbc_fetch_into_001.phpt @@ -20,7 +20,7 @@ $arr = []; var_dump(odbc_fetch_into($res, $arr)); var_dump($arr); $arr = []; -var_dump(odbc_fetch_into($res, $arr, 0)); +var_dump(odbc_fetch_into($res, $arr)); var_dump($arr); $arr = []; var_dump(odbc_fetch_into($res, $arr, 2)); diff --git a/ext/odbc/tests/odbc_fetch_object_001.phpt b/ext/odbc/tests/odbc_fetch_object_001.phpt index 62a8fc3b2c7e5..f6255e635638c 100644 --- a/ext/odbc/tests/odbc_fetch_object_001.phpt +++ b/ext/odbc/tests/odbc_fetch_object_001.phpt @@ -17,7 +17,7 @@ odbc_exec($conn, 'INSERT INTO fetch_object VALUES (1), (2)'); $res = odbc_exec($conn, 'SELECT * FROM fetch_object'); var_dump(odbc_fetch_object($res)); -var_dump(odbc_fetch_object($res, 0)); +var_dump(odbc_fetch_object($res)); var_dump(odbc_fetch_object($res, 2)); var_dump(odbc_fetch_object($res, 4)); diff --git a/ext/odbc/tests/odbc_fetch_row_001.phpt b/ext/odbc/tests/odbc_fetch_row_001.phpt index 576bb15414ceb..572955f97ef8a 100644 --- a/ext/odbc/tests/odbc_fetch_row_001.phpt +++ b/ext/odbc/tests/odbc_fetch_row_001.phpt @@ -40,7 +40,7 @@ $conn = odbc_connect($dsn, $user, $pass); odbc_exec($conn, 'DROP TABLE fetch_row'); ?> --EXPECTF-- -Warning: odbc_fetch_row(): Argument #3 ($row) must be greater than or equal to 1 in %s on line %d +Warning: odbc_fetch_row(): Last argument ($row) must be greater than or equal to 1 in %s on line %d bool(false) bool(true) string(1) "1" From 27c025ff1a42fb73381751bcc40f9b7fcf7456dc Mon Sep 17 00:00:00 2001 From: Calvin Buckley Date: Mon, 6 Apr 2026 19:07:50 -0300 Subject: [PATCH 3/3] Specify the null default explicitly Rather than having the implicit default twice; keeps the test similar. --- ext/odbc/tests/odbc_fetch_array_001.phpt | 2 +- ext/odbc/tests/odbc_fetch_into_001.phpt | 2 +- ext/odbc/tests/odbc_fetch_object_001.phpt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/odbc/tests/odbc_fetch_array_001.phpt b/ext/odbc/tests/odbc_fetch_array_001.phpt index fb72ac19565d8..e7d4ccf328b60 100644 --- a/ext/odbc/tests/odbc_fetch_array_001.phpt +++ b/ext/odbc/tests/odbc_fetch_array_001.phpt @@ -17,7 +17,7 @@ odbc_exec($conn, 'INSERT INTO fetch_array VALUES (1), (2)'); $res = odbc_exec($conn, 'SELECT * FROM fetch_array'); var_dump(odbc_fetch_array($res)); -var_dump(odbc_fetch_array($res)); +var_dump(odbc_fetch_array($res, null)); var_dump(odbc_fetch_array($res, 2)); var_dump(odbc_fetch_array($res, 4)); diff --git a/ext/odbc/tests/odbc_fetch_into_001.phpt b/ext/odbc/tests/odbc_fetch_into_001.phpt index de57991a1c216..e420475f02ccb 100644 --- a/ext/odbc/tests/odbc_fetch_into_001.phpt +++ b/ext/odbc/tests/odbc_fetch_into_001.phpt @@ -20,7 +20,7 @@ $arr = []; var_dump(odbc_fetch_into($res, $arr)); var_dump($arr); $arr = []; -var_dump(odbc_fetch_into($res, $arr)); +var_dump(odbc_fetch_into($res, $arr, null)); var_dump($arr); $arr = []; var_dump(odbc_fetch_into($res, $arr, 2)); diff --git a/ext/odbc/tests/odbc_fetch_object_001.phpt b/ext/odbc/tests/odbc_fetch_object_001.phpt index f6255e635638c..eb553409639f8 100644 --- a/ext/odbc/tests/odbc_fetch_object_001.phpt +++ b/ext/odbc/tests/odbc_fetch_object_001.phpt @@ -17,7 +17,7 @@ odbc_exec($conn, 'INSERT INTO fetch_object VALUES (1), (2)'); $res = odbc_exec($conn, 'SELECT * FROM fetch_object'); var_dump(odbc_fetch_object($res)); -var_dump(odbc_fetch_object($res)); +var_dump(odbc_fetch_object($res, null)); var_dump(odbc_fetch_object($res, 2)); var_dump(odbc_fetch_object($res, 4));