Re: `COM_RESET_CONNECTION` support in `mysqlnd`

From: Date: Thu, 02 Jul 2026 14:58:13 +0000
Subject: Re: `COM_RESET_CONNECTION` support in `mysqlnd`
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-131709@lists.php.net to get a copy of this message
On Tue, May 19, 2026 at 6:55 AM <go.al.ni@gmail.com> wrote: > > > Personally, given that both of these versions are EOL, this feels > > acceptable, but I'm curious what others think. Notably, if we were to > > implement configuration for this we'd likely need to introduce yet > > another INI variable; I have an impression that PHP maintainers are > > somewhat skeptical of adding new INI settings. > > I think it's ok to drop support of EOL versions. But I also think it's possible to > support both new and ancient mysql even without any runtime options (ini setting, PDO constant et > al). First try to send COM_RESET_CONNECTION and if server return > error, try COM_CHANGE_USER. Result of this check may be cached for > improved performance, but not strictly necessary. This at least won't break anyone. > > But if you are feel strongly about completely dropping > COM_CHANGE_USER, then some deprecation period should exist. Users > should see at least E_DEPRECATED errors in their logs before day X. > I know about changelog page and NEWS file, but among all the PHP programmers I know, no one reads > them. I don't know that I feel strongly, but I also don't think it's worth the complexity of a dual check and deprecation notice for (what I imagine is) the small subset of users who want modern PHP but not modern database software. > > Secondly, I'm curious what people think about implementing this in > > both PDO *and* mysqlnd. In PDO, we can replace the > > liveness check > > with this command, which would act as both a liveness check and a > > reset for no additional round-trip cost. > > It's ok to replace liveness check with reset, but I think you choose wrong place for > implementation. You changed the pdo_mysql_check_liveness function > and now it not just "liveness check", which leads to a discrepancy with its name and also > liveness functions from other PDO drivers. I'd rather implement in on PDO level. Something > like: > > ```c > // pdo_dbh.c:420 > /* is the connection still alive ? */ > - if (pdbh->methods->check_liveness && FAILURE == > (pdbh->methods->check_liveness)(pdbh)) { > + if (!(pdbh->methods->reset && (pdbh->methods->reset)(pdbh)) && > pdbh->methods->check_liveness && FAILURE == > (pdbh->methods->check_liveness)(pdbh)) { > /* nope... need to kill it */ > pdbh->refcount--; > zend_list_close(le); > pdbh = NULL; > } > ``` Great catch, I'm somewhat embarrassed I didn't notice this myself. I took your suggestion and updated the PR to include a new "reset connection" hook for PDO that currently only mysqlnd implements. Thank you!

« previous php.internals (#131709) next »