【问题标题】:how to catch pg_connect() function error?如何捕获 pg_connect() 函数错误?
【发布时间】:2011-05-14 06:43:21
【问题描述】:

pg_connect() 以表格格式显示错误。不需要以表格格式显示错误消息,而是需要错误消息警报。

错误信息
警告:pg_connect() [function.pg-connect]:无法连接到 PostgreSQL 服务器:致命:第 41 行 /home/test/public_html/QueueManager/Modules/Database.php 中的用户“test”的密码验证失败

如果以表格格式显示错误。
执行 pg_connect() 后抛出异常。
但它不起作用。

代码

function connect()
{
  $HOST = $GLOBALS[Database_Conn][Db_Host];     # Host name 
  $USER = $GLOBALS[Database_Conn][Db_User];     # database user name 
  $DBNAME = $GLOBALS[Database_Conn][Db_Name];   # name of the database
  $PASSWORD = $GLOBALS[Database_Conn][Db_Pass]; # password the database user.

  try 
  {
    $conn = pg_connect("host=$HOST dbname=$DBNAME user=$USER ".
                       "password=$PASSWORD sslmode=disable");
    if(!$conn)
    {
      throw new Exception("Database Connection Error");
    }
    return $conn;
  }
  catch (Exception $e) 
  {
    print <<<_HTML_
    <script> alert('Caught exception'); 
    </script> _HTML_;
    die();
  }
}

请给我解决办法

【问题讨论】:

  • 在捕获异常的同时抛出异常是不是有点连线...? (老实说,PHP 是否支持这种抛出异常)
  • 是的,PHP 5 及更高版本支持异常。我猜他的代码就是这样,因为他正在测试异常的东西。问题是“警告:pg_connect()”消息是在之前 pg_connect 甚至返回之前生成的。
  • @DrColossos :: 可能他想隐藏默认异常,即显示连接尝试中使用的用户名,在这种情况下,消息是:password authentication failed for user "test"

标签: php postgresql


【解决方案1】:

要隐藏PHP生成的错误文本,在函数调用前加上@,例如:

$conn = @pg_connect("host=$HOST dbname=$DBNAME user=$USER ".
                   "password=$PASSWORD sslmode=disable");

更多details here

【讨论】:

  • 请记住,如果pg_connect() 函数不存在,您的脚本仍然会死掉,但您不会看到任何错误。
【解决方案2】:

pg_connect 不会抛出异常,因此您必须转换为如下所示的异常。

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

try {
    $conn=@pg_connect("host=dbhost user=dbuser dbname=db password=dbpass");
} Catch (Exception $e) {
    Echo $e->getMessage();
}

请参考这个更详细的

http://php.net/manual/en/language.exceptions.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2013-01-28
    • 1970-01-01
    • 2023-03-12
    • 2012-01-25
    • 2020-10-01
    相关资源
    最近更新 更多