ext/pdo: Throw a ValueError from bindColumn() for an unknown column - #23835
Merged
Merged
Conversation
iliaal
added a commit
to iliaal/php-src
that referenced
this pull request
Sep 22, 2026
A column name that is not in the result set is a programming error, so report it the way the method already reports an empty name or an index below one, rather than through PDO::ATTR_ERRMODE. The equivalent parameter failure in bindParam() and bindValue() stays an ERRMODE error: its site in rewrite_name_to_position() is only reachable once execute() has populated bound_param_map, never from the bind methods themselves. Closes phpGH-23835
iliaal
force-pushed
the
pdo-bindcolumn-valueerror
branch
from
September 22, 2026 02:14
6e43946 to
67cfe51
Compare
Contributor
|
Maybe having the wrong column name in the message as before is quite helpful? |
iliaal
added a commit
to iliaal/php-src
that referenced
this pull request
Sep 22, 2026
A column name that is not in the result set is a programming error, so report it the way the method already reports an empty name or an index below one, rather than through PDO::ATTR_ERRMODE. The equivalent parameter failure in bindParam() and bindValue() stays an ERRMODE error: its site in rewrite_name_to_position() is only reachable once execute() has populated bound_param_map, never from the bind methods themselves. Closes phpGH-23835
iliaal
force-pushed
the
pdo-bindcolumn-valueerror
branch
from
September 22, 2026 12:19
67cfe51 to
67af1dd
Compare
Member
Author
|
Ah, indeed. The message now carries it: |
A column name that is not in the result set is a programming error, so report it the way the method already reports an empty name or an index below one, rather than through PDO::ATTR_ERRMODE. The equivalent parameter failure in bindParam() and bindValue() stays an ERRMODE error: its site in rewrite_name_to_position() is only reachable once execute() has populated bound_param_map, never from the bind methods themselves. Closes phpGH-23835
iliaal
force-pushed
the
pdo-bindcolumn-valueerror
branch
from
September 29, 2026 15:36
67af1dd to
65b257d
Compare
bukka
added a commit
to bukka/php-src
that referenced
this pull request
Sep 29, 2026
* upstream/master: (99 commits) NEWS Fix property hook escape analysis causing misoptimization Fix __isset escape analysis causing misoptimization Fix memory leak when closing a statement on a killed connection Reset field_count for OK packet (php#23890) Fix phpGH-23986: Clear the realpath cache in the child after pcntl_fork() (php#23987) ext/standard: Remove redundant if-branch in rot13 (php#23795) ext/pdo: Throw a ValueError from bindColumn() for an unknown column (php#23835) Zend: rename zend_object* parameter to "this_ptr" for zend_call_* functions (php#23989) ext/pdo: Release driver options after bindParam and bindColumn tests: Raise test stack for stream error depth limit under MSan (php#23985) Zend: Remove zend_atomic.[ch] abstraction (php#23927) fibers: fix phpGH-23921 (Fibers start with error_reporting = 0 when the error_reporting INI directive is not set) ext/pdo: Keep statement class when ATTR_STATEMENT_CLASS is rejected Verify bundled sources using CI - Opcache JIT IR (php#20179) zend_portability: Simplify definition of `ZEND_NORETURN` (php#23908) Fix phpGH-23758: PDO_Firebird returns null for empty BLOBs (php#23763) Remove redundant parentheses in session tests (php#23609) Update IR (php#23861) Fix OSS-Fuzz #552682112: assertion failure wrt zp_arg_must_be_sent_by_ref() (php#23760) ... # Conflicts: # ext/openssl/xp_ssl.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #23799, where kamil-tekiela asked for a ValueError here. A column name that is not in the result set is a programming error, so bindColumn() now throws instead of reporting through
PDO::ATTR_ERRMODEand returning false, matching how the same argument already rejects an empty name or an index below one.bindParam() and bindValue() keep their ERRMODE error. The equivalent site in rewrite_name_to_position() is reachable only after execute() has populated bound_param_map, so the bind methods never get there; instrumenting it across ext/pdo, ext/pdo_mysql and ext/pdo_sqlite showed every hit coming from execute(). Converting it would change execute(), which is a separate decision.