有时我在这一行遇到致命错误
$result = $db->execute($query);
$primary = $result->getRows();
致命错误:在非对象上调用成员函数 getRows()
我正在寻找一种解决方案来捕获此错误并重定向到索引页面。
重写一些东西很复杂,因为系统很旧。
有时我在这一行遇到致命错误
$result = $db->execute($query);
$primary = $result->getRows();
致命错误:在非对象上调用成员函数 getRows()
我正在寻找一种解决方案来捕获此错误并重定向到索引页面。
重写一些东西很复杂,因为系统很旧。
Something like this:
$result = $db->execute($query);
if ($result===false) {
header("Location: errorpage.php");
exit;
}
$primary = $result->getRows();
首先,无论哪种方式都不应该有错误。
您必须修复代码以纠正错误,而不是编写新代码来处理它。
从 DB 中获取错误消息以查看导致此错误的特定问题并修复它。
还
通常你不能捕捉到错误......只有异常......幸运的是,你可以使用 PHP 设置一个 error_handler 来抛出异常。(来自 php ErrorException页面上的评论)
class ErrorHandler extends Exception {
protected $severity;
public function __construct($message, $code, $severity, $filename, $lineno) {
$this->message = $message;
$this->code = $code;
$this->severity = $severity;
$this->file = $filename;
$this->line = $lineno;
}
public function getSeverity() {
return $this->severity;
}
}
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorHandler($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler", E_ALL);
因此,对于您的具体问题,您只需执行以下操作:
try{
$result = $db->execute($query);
$primary = $result->getRows();
} catch (ErrorHandler $e){
header("Location: /index.php");
exit;
}
我们需要知道 $db 是什么,您没有包含初始化 $db 的代码或告知我们此引用的内容。
假设您使用的是 PDO 库,PDO 对象本身具有 PDO::exec(),而 PDOStatement 对象具有 PDOStatement::execute()。因此,我假设 $db 是 PDOStatement 的一个实例,并且您正在调用 execute() 方法,该方法返回一个布尔值,失败时返回 false,成功时返回 true - 它不会在成功时返回对象。如果成功,您应该调用 $db->fetchAll();
if (!$db->execute($query)) {
header("Location: error.php");
exit;
}
$rows = $db->fetchAll();
The problem here is that execute() will return FALSE under some circumstances and a boolean is not the result object.
To avoid this error you should always be checking the output of execute() if it was even executed successfully.
For example:
$result = $db->execute($query);
if ($result !=== false) {
$primary = $result->getRows();
}
如果您收到错误消息“标头已发送”,那是因为已经输出了某些内容。例如:
echo "hello world;";
header("Location: errorpage.php");
或者:
<?php // notice the space before <?php
header("Location: errorpage.php");
?>