有没有办法在PHP中捕获MySQL和数据库错误?

时间:2011-05-25 06:49:07

标签: php mysql error-handling mysql-error-1045

有时候我会收到像

这样的数据库错误
  

警告:mysql_connect()[function.mysql-connect]:访问被拒绝用户'test'@'101.190.193.83'(使用密码:是)

     

无法连接:访问被拒绝用户'test'@'101.190.193.83'(使用密码:是)“

但真正的密码没有变化。

有没有办法在日志文件中捕获此错误并在屏幕上显示一些不错的消息,例如“服务器错误。请再试一次。”

5 个答案:

答案 0 :(得分:11)

如果您不希望PHP显示警告,则必须使用“@”运算符

$connect = @mysql_connect(HOST, USER, PASS);//won't display the warning if any.
if (!$connect) { echo 'Server error. Please try again sometime. CON'; }

您还可以考虑在生产中的php.ini文件中将display_errors设置为0

您也可以考虑PDO连接到MySQL,它使用例外作为默认报告错误,

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Could not connect : ' . $e->getMessage();
}

答案 1 :(得分:3)

<?php
    $connect = mysql_connect(HOST, USER, PASS);
    if(!$connect) { echo 'Server error. Please try again sometime. CON'; }

    $select_db = mysql_select_db(DATABASE);
    if(!$select_db) { echo 'Server error. Please try again sometime. DB'; }
?>

答案 2 :(得分:3)

  

有没有办法将这些错误捕获到日志文件中??

是。所有PHP错误和警告都写入Web服务器的错误日志文件,因此您无需执行任何其他操作 - 它已经完成。

要回答问题的第二部分,如果您不希望屏幕上显示原始错误消息,可以通过以下两种方式之一来防止此问题:

  1. 使用函数调用前面的@符号 - 即$db = @mysql_connect(...);。这将仅针对该特定函数调用关闭错误报告。过度使用这种技术通常被认为是一个坏主意,但偶尔做这件事是合法的。

  2. 更好的选择可能是关闭全局错误报告标记,可以在PHP.ini,本地.htaccess文件中,也可以在程序中使用ini_set()

  3. 通常,只有在您开发网站时才能使用网页上的错误报告。一旦网站上线,您应该打开错误报告,这样您就不会在客户面前精心构建的页面布局中的随机位置显示PHP错误。发生的任何错误仍将写入服务器错误日志,但不会显示在页面上。

    对于MySQL错误,例如您所拥有的错误,您仍然可以使用mysql_error()函数在程序中查明错误本身。这将包含要发生的最后一个错误的详细信息,因此您可以通过编程方式检查它并报告合理的错误消息。

答案 3 :(得分:1)

来源:http://wallstreetdeveloper.com/php-database-connection/

以下是php中数据库连接的示例代码:

<?php
//Step-1 : Create a database connection
$connection=mysql_connect(“localhost”,”root”,”root”);
if(!$connection) {
    die(“Database Connection error” . mysql_error());
}
//Step-2 : Select a database to use
$db=mysql_select_db(“widget_corp”,$connection);
if(!$db) {
    die(“Database Selection error” . mysql_error());
}
?>
<html>
<head>
<title>Database</title>
</head>
<body>
<?php
 //Step 3 : Perform database Queury
 $result=mysql_query(“select * from subjects”,$connection);
if(!$result) {
    die(“No rows Fetch” . mysql_error());
}

//Step 4 : Use returned data
while($row=mysql_fetch_array($result))
{
     //echo $row[1].” “.$row[2].”<br>”;
    echo $row["menu_name"].” “.$row["position"].”<br>”;
}

?>
</body>
</html>
<?php
//Step 5 : Close Connection
mysql_close($connection);
?>

答案 4 :(得分:0)

try {
    $dbh = new PDO($dsn, $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// if your are not set this attributes you won't get any exceptions.
} catch (PDOException $e) {
    echo 'Server error. Please try again some time.';
}