Re: [PHP-DEV] [RFC] [VOTE] Minimum supported versions for PHP 8.6

On 2026-07-16 17:22, Eric Norris wrote:

Hello all,

I'm announcing the start of the vote for the "Minimum supported
versions for PHP 8.6" RFC. The voting will end at 2026-07-30 15:48:00
UTC. There are multiple votes, one for each minimum version
requirement.

RFC: PHP: rfc:min_supported_versions_php_8_6
Discussion: php.internals: [RFC] [Discussion] Minimum supported versions for PHP 8.6

Thanks!
Eric

I'm sorry to bring this up now (I missed the discussion phase) but is there a reason to make `COM_RESET_CONNECTION` mandatory? I clearly see the upside of using it but it's a backward compatibility break that I find hard to justify:

1. If someone relied on the persistent connection state (for whatever reason that we might not see as the right technical choices, but still), the behavior of their application will appear silently broken.

2. If someone still uses an older MariaDB/MySQL, they'll get a significant performance penalty: their persistent connections will silently turn to non-persistent. And we're not talking about a decade-old databases!

If it were made optional, looks like both sides win: whoever interested, can opt in and stop worrying about mutable connection state, and those who can't do it because they have to use an older DB have one headache less: the RFC leaves them with few disappointing alternatives such as to accept the worse performance or not upgrade PHP.

Please correct me if I misunderstood the behavior you propose.

Cheers,
Alex

On Thu, Jul 16, 2026 at 3:46 PM Alexander Kurilo <alex@kurilo.me> wrote:

On 2026-07-16 17:22, Eric Norris wrote:
> Hello all,
>
> I'm announcing the start of the vote for the "Minimum supported
> versions for PHP 8.6" RFC. The voting will end at 2026-07-30 15:48:00
> UTC. There are multiple votes, one for each minimum version
> requirement.
>
> RFC: PHP: rfc:min_supported_versions_php_8_6
> Discussion: php.internals: [RFC] [Discussion] Minimum supported versions for PHP 8.6
>
> Thanks!
> Eric

I'm sorry to bring this up now (I missed the discussion phase) but is
there a reason to make `COM_RESET_CONNECTION` mandatory? I clearly see
the upside of using it but it's a backward compatibility break that I
find hard to justify:

That's okay, thanks for taking a look!

1. If someone relied on the persistent connection state (for whatever
reason that we might not see as the right technical choices, but still),
the behavior of their application will appear silently broken.

This is the correct understanding of the behavior I propose, though I
would expect it's incredibly rare that code would rely on the prior
behavior.

2. If someone still uses an older MariaDB/MySQL, they'll get a
significant performance penalty: their persistent connections will
silently turn to non-persistent. And we're not talking about a
decade-old databases!

This is also the correct understanding of the behavior I propose. I
don't know if I would say this is a *significant* performance penalty,
however, since it depends on the application. I'll also note that
MySQL 5.7.3 is at least a decade old; it was released on December 3rd,
2013.

If it were made optional, looks like both sides win: whoever interested,
can opt in and stop worrying about mutable connection state, and those
who can't do it because they have to use an older DB have one headache
less: the RFC leaves them with few disappointing alternatives such as to
accept the worse performance or not upgrade PHP.

There are many ways we could make this optional:

- We could make an INI setting. I believe this is generally frowned
upon by the internals community.
- We could make it so that if `COM_RESET_CONNECTION` doesn't work, we
use the connection anyway. I think this is dangerous, since it would
mean we are silently allowing the "wrong" behavior.
- We could make some sort of PDO option? I'm less familiar with this,
but then I also worry about the complexity of the change. Again,
arguably this feature is the correct and safe behavior, so I'm wary of
adding unnecessary complexity to account for something that should be
discouraged.

Maybe there's another option I haven't thought of, but given the above
options, I feel confident in the current proposal. I don't think it's
unreasonable to ask users to use a modern database version.

Please correct me if I misunderstood the behavior you propose.

I believe we're on the same page. Thanks again!

On 2026-07-16 23:10, Eric Norris wrote:
> On Thu, Jul 16, 2026 at 3:46 PM Alexander Kurilo <alex@kurilo.me> wrote:
>>
>> On 2026-07-16 17:22, Eric Norris wrote:
> This is also the correct understanding of the behavior I propose. I
> don't know if I would say this is a *significant* performance penalty,
> however, since it depends on the application. I'll also note that
> MySQL 5.7.3 is at least a decade old; it was released on December 3rd,
> 2013.

Yep, my bad. 2017 and 2013, where MariaDB 10.2 and MySQL 5.7.3 were release respectively didn't feel that long ago when I was writing the response :smiley:

>> If it were made optional, looks like both sides win: whoever interested,
>> can opt in and stop worrying about mutable connection state, and those
>> who can't do it because they have to use an older DB have one headache
>> less: the RFC leaves them with few disappointing alternatives such as to
>> accept the worse performance or not upgrade PHP.
>
> There are many ways we could make this optional:
>
> - We could make an INI setting. I believe this is generally frowned
> upon by the internals community.
> - We could make it so that if `COM_RESET_CONNECTION` doesn't work, we
> use the connection anyway. I think this is dangerous, since it would
> mean we are silently allowing the "wrong" behavior.
> - We could make some sort of PDO option? I'm less familiar with this,
> but then I also worry about the complexity of the change. Again,
> arguably this feature is the correct and safe behavior, so I'm wary of
> adding unnecessary complexity to account for something that should be
> discouraged.

Thanks for the detailed overview of the options! When replying to the previous email, I had had in mind specifically the PDO attribute (or mysqli option) because it seems to be the de-facto standard for opting in for database features. Inlike an .ini option, it's explicit and doesn't require library maintainer to figure out the interpreter's parameters. I'd appreciate considering PDO attr/mysqli option as an alternative to just using `COM_RESET_CONNECTION` unconditionally to avoid the BC break that looks easily avoidable.

I don't have numbers to support the argument but with some prior experience, I can easily imagine a bloody enterprise where a DBA is in another orgchart branch than developers and someone's forced to use what they have because enforcing an upgrade is out of their power. Also, I did see some load balancers with significant overhead that effectively forced developers to use persistent connections (establishing a connection took tens of milliseconds). In both cases, I think, I'd be pretty disappointed being left out of PHP 8.6 because of few conditionals not being added.

Also, apparently it's impossible even to guesstimate the number of developers that rely on the shared connection's state (even though it's usually considered a bad practice), but breaking it silently for the same cost of saving few conditionals doesn't look fair: even a bug that has been there for too long eventually becomes a feature (xkcd: Workflow).

So, is it not too late to consider making `COM_RESET_CONNECTION` an opt-in addition? It's a great one but maybe not leaving out those who can't (or don't want to) leverage it is safer way to go.

Thanks,
Alex.

On Fri, Jul 17, 2026 at 4:12 PM Alexander Kurilo <kamazee@gmail.com> wrote:

On 2026-07-16 23:10, Eric Norris wrote:
> On Thu, Jul 16, 2026 at 3:46 PM Alexander Kurilo <alex@kurilo.me> wrote:
>>
>> On 2026-07-16 17:22, Eric Norris wrote:
> This is also the correct understanding of the behavior I propose. I
> don't know if I would say this is a *significant* performance penalty,
> however, since it depends on the application. I'll also note that
> MySQL 5.7.3 is at least a decade old; it was released on December 3rd,
> 2013.

Yep, my bad. 2017 and 2013, where MariaDB 10.2 and MySQL 5.7.3 were
release respectively didn't feel that long ago when I was writing the
response :smiley:

>> If it were made optional, looks like both sides win: whoever interested,
>> can opt in and stop worrying about mutable connection state, and those
>> who can't do it because they have to use an older DB have one headache
>> less: the RFC leaves them with few disappointing alternatives such as to
>> accept the worse performance or not upgrade PHP.
>
> There are many ways we could make this optional:
>
> - We could make an INI setting. I believe this is generally frowned
> upon by the internals community.
> - We could make it so that if `COM_RESET_CONNECTION` doesn't work, we
> use the connection anyway. I think this is dangerous, since it would
> mean we are silently allowing the "wrong" behavior.
> - We could make some sort of PDO option? I'm less familiar with this,
> but then I also worry about the complexity of the change. Again,
> arguably this feature is the correct and safe behavior, so I'm wary of
> adding unnecessary complexity to account for something that should be
> discouraged.

Thanks for the detailed overview of the options! When replying to the
previous email, I had had in mind specifically the PDO attribute (or
mysqli option) because it seems to be the de-facto standard for opting
in for database features. Inlike an .ini option, it's explicit and
doesn't require library maintainer to figure out the interpreter's
parameters. I'd appreciate considering PDO attr/mysqli option as an
alternative to just using `COM_RESET_CONNECTION` unconditionally to
avoid the BC break that looks easily avoidable.

I don't have numbers to support the argument but with some prior
experience, I can easily imagine a bloody enterprise where a DBA is in
another orgchart branch than developers and someone's forced to use what
they have because enforcing an upgrade is out of their power. Also, I
did see some load balancers with significant overhead that effectively
forced developers to use persistent connections (establishing a
connection took tens of milliseconds). In both cases, I think, I'd be
pretty disappointed being left out of PHP 8.6 because of few
conditionals not being added.

Also, apparently it's impossible even to guesstimate the number of
developers that rely on the shared connection's state (even though it's
usually considered a bad practice), but breaking it silently for the
same cost of saving few conditionals doesn't look fair: even a bug that
has been there for too long eventually becomes a feature
(xkcd: Workflow).

So, is it not too late to consider making `COM_RESET_CONNECTION` an
opt-in addition? It's a great one but maybe not leaving out those who
can't (or don't want to) leverage it is safer way to go.

I don't know if the cost is "just a few conditionals." We'd have two
paths with a PDO option:

1) Make it the default, and users can turn it off. Now we need to
document this option, and explain that you shouldn't turn it off
unless you've noticed that you are relying on prior connection state.
In this case, you'd need to (a) know or find out that you're relying
on it and then (b) make a code change to opt-out. Once you're in the
position of making a code change to opt out, you're arguably in a
position to try to fix your code in the first place.

2) Make it off by default, and users can turn it on. Now persistent
connection users continue to be "unsafe", and we need to document this
option and explain that you should always turn it on. Some users may
do this, some may not, maybe people start to develop a "superstition"
around the option.

I don't like either of these options, and as the RFC author I feel
that the best outcome is to choose the "correct" choice, especially
considering that we are talking about software that is a decade old.
While I can appreciate your argument, I don't think that the pool of
affected users is large enough to warrant anything less than this.

Hi

On 7/18/26 01:34, Eric Norris wrote:

I don't know if the cost is "just a few conditionals." We'd have two
paths with a PDO option:

[…]

I don't like either of these options, and as the RFC author I feel
that the best outcome is to choose the "correct" choice, especially
considering that we are talking about software that is a decade old.
While I can appreciate your argument, I don't think that the pool of
affected users is large enough to warrant anything less than this.

I agree with the entire quoted email, and particularly the last paragraph. The “shared nothing” request model of PHP is a huge selling point to make the code easy to reason about and prevent a whole class of bugs. I would consider it a bug that persistent connection can introduce mutable state that outlives a given request and thus supporting and using COM_RESET_CONNECTION is a bugfix in spirit to me.

I also find it a reasonable expectation from PHP users, and particularly companies, that when they want to benefit from the latest and greatest PHP that they also keep the rest of their stack current. For the COM_RESET_CONNECTION case the only expectation is that they use a MySQL or MariaDB version that is not EOL. In fact according to EU law such as the GDPR, using software that is no longer supported by updates is extremely risky, since it very likely contains known and unfixed security vulnerabilities. My understanding is that there are other compliance frameworks - such as PCI - that effectively mandate using “maintained software” as well.

Best regards
Tim Düsterhus