有时我会在这一行中出现致命错误
$result = $db->execute($query);
$primary = $result->getRows();
致命错误:在非对象上调用成员函数getRows()
我正在寻找解决方案以捕获此错误并重定向到索引页。
重写一些东西很复杂,因为系统很旧。
答案 0 :(得分:1)
这样的事情:
$result = $db->execute($query);
if ($result===false) {
header("Location: errorpage.php");
exit;
}
$primary = $result->getRows();
答案 1 :(得分:1)
首先,不管怎样都不应该出错。
您必须修复代码才能更正错误,而不是编写新代码来处理错误。
从DB中获取错误消息,以查看导致此错误的特定问题并进行修复。
另外
答案 2 :(得分:0)
这里的问题是execute()在某些情况下会返回FALSE,而boolean不是结果对象。
为了避免这个错误,你应该总是检查execute()的输出,如果它甚至成功执行。
例如:
$result = $db->execute($query);
if ($result !=== false) {
$primary = $result->getRows();
}
答案 3 :(得分:0)
我们需要知道$ db是什么,你没有包含初始化$ db的代码,或者告诉我们这是什么引用。
假设您正在使用PDO库,PDO对象本身具有PDO :: exec(),PDOStatement对象具有PDOStatement :: execute()。因此,我假设$ db是PDOStatement的一个实例,并且您正在调用execute()方法,该方法在失败时返回boolean,false并在成功时返回true - 它在成功时不返回对象。如果成功,则应调用$ db-> fetchAll();
if (!$db->execute($query)) {
header("Location: error.php");
exit;
}
$rows = $db->fetchAll();
答案 4 :(得分:0)
通常情况下,您无法捕获错误...只有异常....幸运的是,您可以设置一个错误处理程序,它会抛出异常。 (来自对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;
}
答案 5 :(得分:-1)
如果您收到错误消息“已发送标头”,那是因为已经输出了某些内容。例如:
echo "hello world;";
header("Location: errorpage.php");
或:
<?php // notice the space before <?php
header("Location: errorpage.php");
?>