#40588 [Opn->Bgs]: mysqli_connect_error() == "" on error

From: Date: Thu, 22 Feb 2007 20:27:40 +0000
Subject: #40588 [Opn->Bgs]: mysqli_connect_error() == "" on error
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-109343@lists.php.net to get a copy of this message
ID: 40588 Updated by: tony2001@php.net Reported By: frankpw at fw2s dot com -Status: Open +Status: Bogus Bug Type: MySQLi related Operating System: Win XP Pro PHP Version: 5.2.1 New Comment: That's easy - "3306" and "10" are numeric strings, but "abcd" is not. >Isn't it logical to assume that if connection fails That's the point. Connection doesn't fail. The function is called with wrong parameters, so it doesn't even _try_ to connect, because we already know the parameters are wrong. You can see the same with mysqli_connect() without any parameters. Previous Comments: ------------------------------------------------------------------------ [2007-02-22 20:19:25] frankpw at fw2s dot com I promise to end this discussion if you tell me that passing port number as "3306" or "10" (notice quotes) is correct. Port is declared as int not a string. With above values "3306" will make connection (assuming that server is set to listen on port 3306) and with "10" will fail with proper values returned by mysqli_connect_errno and mysqli_connect_error. Isn't it logical to assume that if connection fails (for whatever reason) this reason should be consistently stated in responses from mysqli_connect_errno() and mysqli_connect_error()? ------------------------------------------------------------------------ [2007-02-22 19:55:18] tony2001@php.net >This check fails in this particular case This check should be used when you pass correct parameters to the function. >Are you insisting that this is not connection error and >that it shoud be handled differently? Yes, I do. You're passing wrong parameters to the function. ------------------------------------------------------------------------ [2007-02-22 19:42:42] frankpw at fw2s dot com That is not a point. Even the manual shows how connection errors should be handled: /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } This check fails in this particular case because mysqli_connect_error() is empty and mysqli_connect_errno is 0. Are you insisting that this is not connection error and that it shoud be handled differently? ------------------------------------------------------------------------ [2007-02-22 19:02:51] tony2001@php.net Remove the @, you'll see the error. ------------------------------------------------------------------------ [2007-02-22 18:34:44] frankpw at fw2s dot com Additional info: Server info: 5.0.27-community-max-nt Client info: 5.0.22 That's as close to match server and client versions as it gets. I've downloaded php_mysql.dll and php_mysqli.dll for server version 5.0.27 directly from MySQL. Please try the code below: <?php $mysqli = @mysqli_connect("localhost","root","pass",null,"abcd"); if (empty($mysqli)) die ("Connection attempt failed! " . mysqli_connect_error() . "<br />\n"); echo "Connected!<br />\n"; echo "Host info: " . mysqli_get_host_info($mysqli) . "<br />\n"; echo "Client info: " . mysqli_get_client_info() . "<br />\n"; echo "Server info: " . mysqli_get_server_info($mysqli) . "<br />\n"; echo "Protocol version: " . mysqli_get_proto_info($mysqli) . "<br />\n"; ?> For test purposes make sure that first four parameters are correct and use fifth as is. Repeat the test with "@" removed from the call to mysqli_connect(). You'll see that warning is being displayed but mysqli_connect_error() is empty and mysqli_connect_errno() == 0. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/40588 -- Edit this bug report at http://bugs.php.net/?id=40588&edit=1

« previous php.bugs (#109343) next »