WordPress插件中的PHP错误处理

Aar*_*onM 0 php database wordpress plugins

我是PHP和Wordpress的新手(但在C#中做得很好),并且我正在努力理解我试图编写的自定义插件中的错误处理.该插件的基础是查询现有的MSSQL数据库(注意它不是标准的MYSQL数据库......)并将行返回到屏幕.这工作得很好,但托管服务提供商已使我的数据库脱机,这导致我出现错误处理问题(我认为没问题).

以下代码无法连接到数据库(如预期的那样),但会在屏幕上显示错误并停止页面处理.它甚至不输出"或死"错误文本.

问题:如何输出简单的"无法加载数据"消息,并继续正常运行?

function generateData()

{

 global $post; 

 if ("$post->post_title" == "Home")
 { 
  try 
  {
   $myServer = "<servername>";
   $myUser = "<username>";
   $myPass = "<password>";
   $myDB = "<dbName>"; 

   //connection to the database
   $dbhandle = mssql_connect($myServer, $myUser, $myPass) 
                              or die("Couldn't open database $myDB"); 


            //... query processing here...
        }
        catch (Exception $e)
  {
         echo "Cannot load data<br />";
  }

 }

 return $content;
}
Run Code Online (Sandbox Code Playgroud)

生成错误:(第31行是$ dbhandle = mssql_connect ...)

警告:mssql_connect()[function.mssql-connect]:无法连接到服务器:第31行的<文件路径>中的<servername>

致命错误:第31行的<文件路径>中超出了30秒的最大执行时间

Pas*_*TIN 5

首先,如果mssql_connect在出现问题时发出警告,那么你可以做的就是避免它:你唯一能做的就是使用@运算符隐藏它:

if (($dbhandle = @mssql_connect($myServer, $myUser, $myPass)) === false) {
    // connection failed
}
Run Code Online (Sandbox Code Playgroud)

注意:die()当发生连接错误时,您不应该这样做:它将停止整个应用程序的执行,这当然是不希望的.


致命错误是第二个问题(这可能是第一个问题的结果).

请注意,您无法从致命错误中恢复:它是致命的.这意味着你必须以某种方式避免它.

在这里,错误是你的脚本工作超过max_execution_time几秒钟; 当mssql_connect在线路上报告错误时,我认为脚本正在等待连接成功,并且在30秒内没有建立.


我没有要测试的SQL Server数据库,但是查看mssql手册的Runtime Configuration部分,我会说这些看起来很有趣:

       name               Default value
mssql.connect_timeout        "5"
mssql.timeout                "60"
Run Code Online (Sandbox Code Playgroud)

你可以尝试改变那些,

  • 要么在php.ini文件中,要么可以修改它
  • ini_set()在尝试连接之前使用.

在第二种情况下,这样的事情可能会起到作用:

ini_set('mssql.connect_timeout', '3');
ini_set('mssql.timeout', '3');
Run Code Online (Sandbox Code Playgroud)