Bug #69884 [Com]: mysqli->connect_error seems to be shared across objects

From: Date: Mon, 13 Aug 2018 21:14:30 +0000
Subject: Bug #69884 [Com]: mysqli->connect_error seems to be shared across objects
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-216769@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69884&edit=1 ID: 69884 Comment by: brak at gameservers dot com Reported by: phpbugs at olemartin dot org Summary: mysqli->connect_error seems to be shared across objects Status: Open Type: Bug Package: MySQLi related Operating System: Ubuntu PHP Version: 5.5.26 Block user comment: N Private report: N New Comment: I'm also seeing this same behavior on PHP 7.1.19 running on CentOS 7 Previous Comments: ------------------------------------------------------------------------ [2015-06-19 14:19:44] phpbugs at olemartin dot org Description: ------------ It seems that the \mysqli->connect_error and \mysqli->connect_errno values (when using mysqli in the object-oriented mode) shares state between all connections. This is not documented (it should at least have a warning in the documentation). When running the example code (make sure you point the first and last connection to a valid MySQL server) i found that all connections reported no errors, although the second one failed. Sometimes (although I'm having a hard time reliably reproducing this) i'm pretty sure i've also seen all three connections report errors (although the third and last connection succeeded). Maybe this value is not overwritten when a successful connection is done, in all code paths? Either way, i think this should be either documented or fixed - as one would not expect this information to be shared between instances when the syntax doesn't indicate that. If this is a static property, i would expect the documentation said to use \mysqli::$connect_error, but that doesn't even work. Test script: --------------- $connections = array( 'Valid connection' => new mysqli('127.0.0.1', 'root', '', 'test', 3306), 'Invalid connection' => @new mysqli('127.0.0.1', 'root', '', 'test', 3307), 'Valid connection 2' => new mysqli('127.0.0.1', 'root', '', 'test', 3306), ); foreach($connections as $desc => $conn) { echo "$desc:\n". "connect_error = ".$conn->connect_error."\n". "connect_errno = ".$conn->connect_errno."\n". "ping = ".@$conn->ping()."\n\n". } Expected result: ---------------- Valid connection: connect_error = connect_errno = 0 ping = 1 Invalid connection: connect_error = Connection refused connect_errno = 2002 ping = Valid connection 2: connect_error = connect_errno = 0 ping = 1 Actual result: -------------- Valid connection: connect_error = connect_errno = 0 ping = 1 Invalid connection: connect_error = connect_errno = 0 ping = Valid connection 2: connect_error = connect_errno = 0 ping = 1 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=69884&edit=1

« previous php.bugs (#216769) next »