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秒的最大执行时间
首先,如果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)
你可以尝试改变那些,
ini_set()在尝试连接之前使用.在第二种情况下,这样的事情可能会起到作用:
ini_set('mssql.connect_timeout', '3');
ini_set('mssql.timeout', '3');
Run Code Online (Sandbox Code Playgroud)