来自mysql_connect()的警告没有填充mysql_error()

时间:2011-09-01 23:37:45

标签: php mysql

环境 - PHP5.2.17,MySQL5.0.92

我正在我的应用程序中实现错误日志记录框架,我正在尝试将错误和警告记录到数据库。

$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
  log(mysql_error());
}
...continue code

我想测试日志记录并将错误的主机传递给mysql_connect函数。正如预期的那样,我在屏幕上收到了警告

Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'host' (1) in /path/to/my/php/file.php on line 4

我的日志函数已被调用,但mysql_error()为null。根据php手册(http://php.net/manual/en/function.mysql-connect.php),mysql_error()应该返回最后一个mysql错误。在手册中,他们甚至有一个如何使用mysql_error()将错误回显到屏幕的示例。

我尝试使用mysql_error($ db),但它返回一个错误,指出$ db未定义。

我尝试用echo mysql_error()替换我的函数;我什么都没说。

我尝试使用mysql_errno();我也得到了。

我知道脚本正在捕获警告,因为它正在将其输出到屏幕。

解决我的问题的一种方法是将警告存储在变量中。

我感谢任何人都能提供的任何帮助。谢谢。

更新 - 2解决方案:

解决方案1 ​​:(感谢Mario在他对这篇文章的评论中建议这一点)

使用PHP函数error_get_last() - 参考(http://php.net/manual/en/function.error-get-last.php)。

使用此解决方案的新工作代码:

$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
  $error = error_get_last();
  log($error['type'] . ": " . $error['message'] . " in file " . $error['file'] . " on line " . $error['line']);
}
...continue code

解决方案2 :(感谢PauPRO在下面的答案1中提出建议)

在使用$ php_errormsg之前,我们需要在php.ini文件中将track_errors设置为1。只需在php.ini文件中包含以下行

即可
track_errors = 1

或者你可以在脚本里面将track_errors设置为1,参见下面的代码:

ini_set('track_errors', 1);
$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
  log(mysql_error());
}
...continue code

两种解决方案都有效!!!

1 个答案:

答案 0 :(得分:2)

请确保在使用track_errors之前启用$php_errormsg

// Preferably do this in your php.ini file, instead of in code.
ini_set('track_errors', 1); 

$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
    log($php_errormsg);
}