Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 来自mysql\u connect()的警告未填充mysql\u错误()_Php_Mysql - Fatal编程技术网

Php 来自mysql\u connect()的警告未填充mysql\u错误()

Php 来自mysql\u connect()的警告未填充mysql\u错误(),php,mysql,Php,Mysql,环境-PHP5.2.17,MySQL5.0.92 我在我的应用程序中实现了一个错误日志框架,并尝试将错误和警告记录到数据库中 $db = mysql_connect('host', 'database', 'password'); if (!$db) { log(mysql_error()); } ...continue code 我想测试日志记录,并将错误的主机传递给mysql\u connect函数。正如所料,我在屏幕上看到了警告 Warning: mysql_connect() [f

环境-PHP5.2.17,MySQL5.0.92

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

$db = mysql_connect('host', 'database', 'password');
if (!$db)
{
  log(mysql_error());
}
...continue code
我想测试日志记录,并将错误的主机传递给mysql\u 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()为空。根据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:(感谢马里奥在他对本帖的评论中提出这一点)

使用PHP函数error\u get\u last()-reference(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

两种解决方案都有效

在使用
$php\u 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);
}

mysql错误是拼写错误吗?这不是mysql错误,而是PHP警告。它将遵守php.ini中的日志设置“$php\u errormsg variable-应该存储最后一个php错误”-谁告诉你的?@zerkms-我在php手册中找到了它->你试过了吗?这同样有效。你们给了我两个解决问题的方法,我下午大部分时间都在试图解决这个问题。。。非常感谢。我将更新帖子以捕获这两种解决方案。