9

有时我会遇到数据库错误,例如

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

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

但实际上密码没有变化。

有什么方法可以在日志文件中捕获此错误并在屏幕上显示一些不错的消息,例如“服务器错误。请稍后再试。”

4

5 回答 5

10

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

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

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

你也可以考虑使用PDO来连接 MySQL,它默认使用异常来报告错误,

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Could not connect : ' . $e->getMessage();
}
于 2011-05-25T08:05:11.310 回答
3

有什么方法可以将这些错误捕获到日志文件中...?

是的。所有 PHP 错误和警告都会写入 Web 服务器的错误日志文件,因此您无需做任何其他事情——它已经完成了。

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

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

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

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

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

于 2011-05-25T08:19:49.540 回答
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'; }
?>
于 2011-05-25T06:51:21.403 回答
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].”&lt;br>”;
    echo $row["menu_name"].” “.$row["position"].”&lt;br>”;
}

?>
</body>
</html>
<?php
//Step 5 : Close Connection
mysql_close($connection);
?>
于 2014-05-07T17:36:04.893 回答
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.';
}
于 2014-04-18T05:08:18.623 回答