]> granicus.if.org Git - php/commitdiff
Fix Bug #73462 - Persistent connections don't set $connect_errno
authorVince <github@darkain.com>
Tue, 8 Nov 2016 22:23:04 +0000 (14:23 -0800)
committerNikita Popov <nikic@php.net>
Tue, 3 Jan 2017 11:13:08 +0000 (12:13 +0100)
Persistent connections skipped resetting $connect_error and $connect_errno values
This adds the "clear error" line to persistent connections for consistency

NEWS
ext/mysqli/mysqli_nonapi.c
ext/mysqli/tests/bug73462.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 8711158387233e9b26760f887fc23b1e39a6d295..26376b694dc6246558d59c64c3b50716742bf278 100644 (file)
--- 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)
index 49db7bbfe60f11b9daf8f48ac9007f643000d631..1c25fafba346c11ee97b07c52ead5783b92783e8 100644 (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);
diff --git a/ext/mysqli/tests/bug73462.phpt b/ext/mysqli/tests/bug73462.phpt
new file mode 100644 (file)
index 0000000..6de7376
--- /dev/null
@@ -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!