ID:               21209
 Updated by:       [EMAIL PROTECTED]
-Summary:          Error in the examples for mysql_fetch_assoc and
                   mysql_fetch_array
 Reported By:      [EMAIL PROTECTED]
-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] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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

Reply via email to