以下是我可能的解决方案:
1)使用exit()
终止脚本。 (问题:影响整页内容的加载,而不仅仅是来自数据库的数据)
2)在页面中嵌入<div>
元素专门用于显示可能的例外情况。
标准方法是什么?
答案 0 :(得分:3)
没有真正的&#34;标准&#34;如何处理数据库中的异常的方法。这完全取决于具体的用例。例如,如果在第一种情况下无法建立数据库连接,则可能需要立即重定向到错误页面并向站点管理员发送电子邮件通知。另一方面,如果您无法执行单个插入(无论出于何种原因),可能更适合通知用户他们正在尝试的内容无法完成并要求他们再试一次
异常本质上是一种让你的方式,而不是你正在使用的编程语言或库,决定如何在出现问题时处理该怎么做。几乎总是,您需要记录错误,然后由您决定最合适的响应。
所有这一切都是说处理异常的适当方式是在应用程序中最有意义的方式。
答案 1 :(得分:1)
您应该在日志文件中记录您的异常并使用它来分析出错的地方。但是从用户的角度来看,你应该向他们展示友好的陈述,例如“抱歉你的请求无法处理”。
答案 2 :(得分:1)
选项1)不整洁,因为它提供了糟糕的用户体验
选项2)是首选。
使用PDO,以下代码将显示异常并将其与时间戳一起存储。
try {
$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $dbh->prepare("INSERT INTO table ( column ) values ( value )");
$stmt->execute();
}
catch(PDOException $e) {
echo "I'm sorry I'm afraid you can't do that.". $e->getMessage() ;// Remove or modify after testing
file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]'). $e->getMessage()."\r\n", FILE_APPEND);
}
在测试之后的生产站点上应该推荐使用echo语句
echo "I'm sorry I'm afraid you can't do that.";
答案 3 :(得分:1)
我在项目中遇到了同样的问题。首先,我想到了一个类似于david strachan的解决方案,但最终我意识到这个解决方案并不完整。我仍然需要有调试信息,但不应该向用户显示这些信息。
我想出了一个解决方案,向用户显示一条消息,指出“系统错误,请再试一次,如果错误仍然存在,请联系支持人员”。此外,同时将错误消息记录到错误日志文件中。
以下是详细信息:
function logException ($exception) {
// Construct the error message to add to the log file
$logDate = date("l, F j, Y H:i:s");
$logMessage = "Date: " . $logDate . "\n";
$logMessage = $logMessage . "Error Message: ". $exception->getMessage() . "\n";
$logMessage = $logMessage . "Error Code: ". $exception->getCode() . "\n";
$logMessage = $logMessage . "Error File: ". $exception->getFile() . "\n";
$logMessage = $logMessage . "Error Line: ". $exception->getLine() . "\n";
$logMessage = $logMessage . "Error Trace:\n". $exception->getTraceAsString() . "\n";
$logMessage = $logMessage . "\n\n**************************************" . "\n\n\n";
// Construct a log file name similar to the name of the script file that cause the error
$info = pathinfo($exception->getFile());
$extension = "." . $info["extension"];
$logFile = "../logs/" . basename($exception->getFile(), $extension) . ".log";
// Add the error message to the log file
error_log($logMessage, 3, $logFile);
// Message to return to the user
$errorMessage = "System error, please try again, if the error persists, then please contact support.";
return $errorMessage;
}
try {
$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $dbh->prepare("INSERT INTO table ( column ) values ( value )");
$stmt->execute();
}
// Catching all sorts of errors, including PDO errors
catch (Exception $e) {
$message = logException ($e);
$data['message'] = $message;
$data['isSuccessful'] = false;
}
请注意以下事项:
现在,你有一个问题,如果你想抛出一个希望用户看到的异常怎么办(例如,你想抛出一个例外,比如“这是错的,试试agian”)?好吧,我确实提出了一个扩展到这个问题的解决方案,但这不是你的问题所在。但如果你还想知道,请告诉我。
干杯。
答案 4 :(得分:0)
try - catch是我在php中处理异常的标准方法......如下所示:PHP EXCEPTIONS
try{
some code here
}catch(Exception $e){
failed response here
}
编辑以详细说明:这只是一种捕获异常的方法。当被抓住时该做什么是由开发人员决定的价值判断。如果这就是问题所在,我很抱歉。
答案 5 :(得分:0)
你必须找到自己的方法来捕捉错误。 我正在使用
try { QUERY } catch(Exception $e) { Log and display error }