【问题标题】:Is there any way to catch MySQL and database errors in PHP?有没有办法在 PHP 中捕获 MySQL 和数据库错误?
【发布时间】:2011-09-01 12:16:52
【问题描述】:

有时我会遇到类似的数据库错误

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

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

但密码确实没有变化。

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

【问题讨论】:

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


【解决方案1】:

如果你不想让 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();
}

【讨论】:

    【解决方案2】:
    <?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'; }
    ?>
    

    【讨论】:

    • 格式丢失,似乎stackoverflow无法识别它..pastebin.com/EFefnNSp
    • 我为你修好了。要获取代码格式,请在代码前放置 4 个空格(或 1 个制表符)。您可以通过选择文本并按 CTRL+K 轻松完成此操作。
    【解决方案3】:

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

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

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

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

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

      李>

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

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

    【讨论】:

      【解决方案4】:

      来源: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);
      ?>
      

      【讨论】:

        【解决方案5】:
        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-03-22
          • 2015-11-09
          • 2011-02-12
          • 2016-08-01
          • 2013-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-30
          相关资源
          最近更新 更多