ID: 40588 Updated by: [EMAIL PROTECTED] 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] [EMAIL PROTECTED] >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] [EMAIL PROTECTED] 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