1
0
mirror of https://github.com/php/php-src.git synced 2026-04-14 11:32:11 +02:00

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
This commit is contained in:
Vince
2016-11-08 14:23:04 -08:00
committed by Nikita Popov
parent ff4e330eae
commit cfd6e14842
3 changed files with 49 additions and 0 deletions

4
NEWS
View File

@@ -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)

View File

@@ -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);

View File

@@ -0,0 +1,41 @@
--TEST--
Bug #73462 (Persistent connections don't set $connect_errno)
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
<?php
require_once("connect.inc");
/* Initial persistent connection */
$mysql_1 = new mysqli('p:'.$host, $user, $passwd, $db);
$result = $mysql_1->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!