summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVince <github@darkain.com>2016-11-08 14:23:04 -0800
committerNikita Popov <nikic@php.net>2017-01-03 12:13:08 +0100
commitcfd6e1484283f9d693e457320e6a0d82422b9b33 (patch)
tree0e6c5aed8a125663d331530d80065c495fe36bf2
parentff4e330eae7aa2550c483d480cb98054e251da55 (diff)
downloadphp-git-cfd6e1484283f9d693e457320e6a0d82422b9b33.tar.gz
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
-rw-r--r--NEWS4
-rw-r--r--ext/mysqli/mysqli_nonapi.c4
-rw-r--r--ext/mysqli/tests/bug73462.phpt41
3 files changed, 49 insertions, 0 deletions
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--
+<?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!