为什么我会收到“未捕获的异常”错误?

时间:2009-10-13 18:04:30

标签: php exception-handling

我有以下PHP代码:

foreach (...) {
  try {
    $Object = MyDataMapper::getById(123);

    if (!$Object->propertyIsTrue()) {
      continue;
    }
  }
  catch (Exception $e) {
    continue;
  }
}
如果找不到数据库记录,

MyDataMapper :: getById()将抛出异常。以下是该方法的定义:

public static function getById($id) {
  $query = "SELECT * FROM table WHERE id = $id";

  $Connection = Database::getInstance();
  $Statement = $Connection->prepare($query);
  $Statement->execute();

  if ($Statement->rowCount() == 0) {
    throw new Exception("Record does not exist!");
    return null;
  }

  $row = $Statement->fetch();

  return self::create($row);
}

当为不存在的数据库记录id调用此代码时,我会收到致命的未捕获异常“异常”错误。

这是为什么?显然我正在抓住异常......我做错了什么?

我确信会抛出异常。我如何处理异常是否有问题 - 可能是继续?

修改

感谢抖动的帮助,以下解决方法解决了这个问题:

if (!$Object->propertyIsTrue()) {
 // Workaround to eAccelerator bug 291 (http://eaccelerator.net/ticket/291).
 $foo = 555;
 continue;
}

2 个答案:

答案 0 :(得分:2)

PHP版本是什么? - > 5.2.9

您使用的是eAccelerator(哪个版本)? - > 0.9.5.3 with ionCube PHP Loader v3.1.34

你抛出什么样的例外? - > 正常异常


某些PHP + eAccelerator版本中存在已知问题,这些问题与优化后的try-catch块有关。

检查eAccelerator错误跟踪器:

首发检查门票

291 Incorrect handling of exception

314 Exceptions not catched

317 Exception not caught

并尝试禁用eAccelerator。

答案 1 :(得分:0)

我认为这可能是因为你正在调用静态方法,但我可能错了。您是否可以通过实例化MyDataMapper并从对象本身调用方法来测试它?