2012-02-20 61 views
2

我已经继承了一个使用PEAR来处理所有数据库调用的站点。使用PEAR来处理数据库。数据库错误显示给用户。如何停止?

这是如何处理查询的例子:

$result = $conn->query($sql); 
if(PEAR::isError($result)) 
{ 
    die('<b>Error:</b>&nbsp;'.$result->getMessage().' 
    <br/><b>Debug Info</b>:&nbsp;'.$result->getDebugInfo()); 
} 
$row = $result->fetchRow(DB_FETCHMODE_ASSOC); 

这是究竟如何是数百本网站的页面。问题在于,无论何时出现任何类型的数据库错误(例如,SQL语法错误),都会直接向用户显示ENTIRE错误和相关查询,因为$result->getDebugInfo()对于明显的安全性来说是一个很大的NO-NO原因。

我不想将错误显示给我的用户,而是希望网站只要发生数据库错误就给我发电子邮件,并通过电子邮件向我发送$result->getDebugInfo()的内容,而不是将其显示给我的用户,这样我就可以警惕问题并进行调试,同时完全避免安全风险。

现在,我认为这将会像寻找PEAR库中的getDebugInfo()函数一样简单,并将其更改为执行上述操作,但这并不奏效,这非常令人费解。我发现只在一个位置的功能,这是主要对PEAR.php类文件,它看起来像这样:

function getDebugInfo() 
{  
    return $this->getUserInfo(); 
} 

无论我对这个功能有什么变化,他们不会反映在$result->getDebugInfo()被称为剧本,令人难以置信的令人费解,让我拉我的头发。我甚至尝试过注释整个函数,并且它仍然向我的用户显示错误代码,就好像它是HAL一样,并且完全控制按照它的意愿去做,而我是他的小奴才。谈论令人费解的(我现在是秃头)!

那么,我该如何让我的网站停止向我的用户泄露PEAR错误和SQL代码,然后通过电子邮件将它发送给我?

回答

-1

搜索

die('<b>Error:</b>&nbsp;'.$result->getMessage().' 
    <br/><b>Debug Info</b>:&nbsp;'.$result->getDebugInfo()); 

,代之以

handleQueryError($result); 

或在您的整个项目类似的东西。您不希望向用户显示调试信息,因此在您的代码中没有执行此操作的语句。想想下一个会继承这个代码的人。

+0

+1同意解决问题而不是解决问题。 – pritaeas 2012-02-20 12:14:58

+0

我有数百个我继承的页面,并希望在函数中修复此错误,而不是必须在多页代码中全部替换该行(特别是因为replace-all甚至不能工作,因为代码稍有变化在不同的部分)。没有其他人会继承这些代码,因为它是我购买的脚本,我是唯一一个处理它的人。那么,如何根据我的OP在PEAR内解决这个问题? – ProgrammerGirl 2012-02-20 12:18:51