From: Vince Date: Tue, 8 Nov 2016 22:23:04 +0000 (-0800) Subject: Fix Bug #73462 - Persistent connections don't set $connect_errno X-Git-Tag: php-7.0.15RC1~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cfd6e1484283f9d693e457320e6a0d82422b9b33;p=php Fix Bug #73462 - Persistent connections don't set $connect_errno Persistent connections skipped resetting $connect_error and $connect_errno values This adds the "clear error" line to persistent connections for consistency --- diff --git a/NEWS b/NEWS index 8711158387..26376b694d 100644 --- a/NEWS +++ b/NEWS @@ -17,6 +17,10 @@ PHP NEWS - DOM: . Fixed bug #67474 (getElementsByTagNameNS filter on default ns). (aboks) +- Mysqli: + . Fixed bug #73462 (Persistent connections don't set $connect_errno). + (darkain) + - Mysqlnd: . Fixed issue with decoding BIT columns when having more than one rows in the result set. 7.0+ problem. (Andrey) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 49db7bbfe6..1c25fafba3 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -183,6 +183,10 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne mysqlnd_restart_psession(mysql->mysql); #endif MyG(num_active_persistent)++; + + /* clear error */ + php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); + goto end; } else { mysqli_close(mysql->mysql, MYSQLI_CLOSE_IMPLICIT); diff --git a/ext/mysqli/tests/bug73462.phpt b/ext/mysqli/tests/bug73462.phpt new file mode 100644 index 0000000000..6de73761f4 --- /dev/null +++ b/ext/mysqli/tests/bug73462.phpt @@ -0,0 +1,41 @@ +--TEST-- +Bug #73462 (Persistent connections don't set $connect_errno) +--SKIPIF-- + +--FILE-- +query("SHOW STATUS LIKE 'Connections'"); + $c1 = $result->fetch_row(); + $result->free(); + $mysql_1->close(); + + /* Failed connection to invalid host */ + $mysql_2 = @new mysqli(' !!! invalid !!! ', $user, $passwd, $db); + @$mysql_2->close(); + + /* Re-use persistent connection */ + $mysql_3 = new mysqli('p:'.$host, $user, $passwd, $db); + $error = mysqli_connect_errno(); + $result = $mysql_3->query("SHOW STATUS LIKE 'Connections'"); + $c3 = $result->fetch_row(); + $result->free(); + $mysql_3->close(); + + if (end($c1) !== end($c3)) + printf("[001] Expected '%d' got '%d'.\n", end($c1), end($c3)); + + if ($error !== 0) + printf("[002] Expected '0' got '%d'.\n", $error); + + print "done!"; +?> +--EXPECTF-- +done!