2011-05-25 115 views
8

有时候,我得到一个数据库错误像有没有办法在PHP中捕捉MySQL和数据库错误?

警告:mysql_connect()函数[function.mysql-连接]:拒绝访问用户test'@'101.190.193.83'(使用密码:YES)

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

但真正存在的密码没有改变

有什么办法。捕捉这个错误一个日志文件并在屏幕上显示一些不错的消息,如“服务器错误。请一段时间重试。”

+0

实际上,我工作的一个开源项目发现错误,显示上一个不错的消息,屏幕并使用比标准错误日志提供的更多信息记录它们。 http://jarofgreen.co.uk/2011/01/tracking-errors-with-php/或http://elastik.sf.net/ – James 2011-06-04 07:31:54

回答

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'; } 
?> 
+0

格式化丢失,外观上stackoverflow无法识别它.. http: //pastebin.com/EFefnNSp – ChrisH 2011-05-25 06:52:24

+3

我为你修好了。要获得代码格式,请在代码前放置4个空格(或1个选项卡)。您可以通过选择文本并按下CTRL + K轻松完成此操作。 – drudge 2011-05-25 06:54:04

+0

@Jnpcl谢谢!学到了新东西:) – ChrisH 2011-05-25 07:07:22

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到在php.ini文件中制作0

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

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

强烈建议+1使用PDO。 – 2011-06-04 08:00:57

3

有什么办法可以捕获这些错误到日志文件中吗?

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

为了回答你问题的第二部分,如果你不想在屏幕上显示的原始错误信息,您可以防止这种情况的方式有两种:

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

  2. 更好的选择可能是把全球的错误报告标志了,无论是在你的PHP.ini,在本地.htaccess文件或程序中使用ini_set()

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

对于MySQL的错误,比如你有一个,你仍然可以通过使用mysql_error()功能得到在程序中的错误本身。这将包含发生错误的最后一个错误的详细信息,因此您可以通过编程检查它并报告合理的错误消息。

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.'; 
} 
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); 
?> 
相关问题