#21209 [Opn->Fbk]: mysql_error isn't returning connections problems.

From: Date: Sat, 04 Jan 2003 11:23:50 +0000
Subject: #21209 [Opn->Fbk]: mysql_error isn't returning connections problems.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-29043@lists.php.net to get a copy of this message
ID: 21209 Updated by: nicos@php.net -Summary: Error in the examples for mysql_fetch_assoc and mysql_fetch_array Reported By: kyrael@web.de -Status: Open +Status: Feedback -Bug Type: Documentation problem +Bug Type: MySQL related Operating System: Windows PHP Version: 4CVS-2002-12-26 (dev) New Comment: Are you using the bundled version of MySQL, if not, which version? I can't reproduce the bug in any of my systems. Anyway changing this to a MySQL bug, and will see if it is verified. Previous Comments: ------------------------------------------------------------------------ [2003-01-03 23:54:27] michael.mauch@gmx.de The manual states that mysql_error() without arguments retrieves the error text of the last recently used MySQL function - _not_ the last opened connection. And that's exactly what happens at least here on Linux (tested with 4.3.0 and 4.4.0-CVS as of today). So if the example doesn't work on Windows, it is broken on Windows. Can you try the example on its own, without your custom error handler? ------------------------------------------------------------------------ [2003-01-03 20:37:16] kyrael@web.de That is not true. Your code just produces a ``Could not connect: '' here. PHP Version 4.4.0-dev System Windows NT localhost 5.1 build 2600 Build Date Dec 26 2002 20:10:08 Server API Apache ------------------------------------------------------------------------ [2003-01-03 17:25:23] nicos@php.net Actually with <?php @mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); ?> It returns: Could not connect: Access denied for user: 'mysql_user@localhost' (Using password: YES) so using mysql_error() here is just fine, it also manages the connections' error. Thank you for your report. ------------------------------------------------------------------------ [2002-12-26 18:51:17] kyrael@web.de Hi! There is an error in the code examples for mysql_fetch_assoc and _array: (for mysql_fetch_assoc, at the page for _array is the same error) [code] $conn = mysql_connect("localhost", "mysql_user", "mysql_password"); if (!$conn) { echo "Unable to connect to DB: " . mysql_error(); exit; } [/code] That doesn't make sense. mysql_error() takes the connection that is passed as an argument or the last opened connection. Where mysql_error() is called, no connection to a mysql server is established, so mysql_error() returns an empty string. Additionaly PHP raises an E_WARNING error anyway in case mysql_connect fails. Sample Output: (custom error handler) [output] Warning: mysql_connect() [function.mysql-connect]: Access denied for user: 'mysql_user@localhost' (Using password: YES) On Line: 2 In File: c:\web\apache\htdocs\test.php Error Context: $conn = mysql_connect("localhost", "mysql_user", "mysql_password"); Unable to connect to DB: [/output] Suggestion: a) Change the examples so that they catch the errors in a way that is appropriate, i.e.: [code] $conn = @mysql_connect("localhost", "mysql_user", "mysql_password"); if (empty($conn)) { echo "Unable to connect to DB: " . $GLOBALS['php_errormsg']; exit; } [/code] b) More work, but would be nicer and match the documentation for mysql_error - yet this changes the behaviour a lot, some scripts would have to be rewritten: Let mysql_connect no longer issue warnings ("Errors coming back from the MySQL database backend no longer issue warnings. Instead, use mysql_error() to retrieve the error text." - Manual page for mysql_error() ), but modify mysql_error so that it holds error strings from mysql_connect as well. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=21209&edit=1

« previous php.bugs (#29043) next »