ID:               21209
 Comment by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Open
 Bug Type:         Documentation problem
 Operating System: Windows
 PHP Version:      4CVS-2002-12-26 (dev)
 New Comment:

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?


Previous Comments:
------------------------------------------------------------------------

[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


-- 
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to