簡體   English   中英

php嘗試捕獲未捕獲異常

[英]php try catch not catching exception

當使用database->Select測試try-catch塊時,我期望在嘗試回顯PDOstatement時捕獲異常,但它告訴我未捕獲錯誤。

Catchable fatal error: Object of class PDOStatement could not be converted to string

我不明白我在做什么錯。

這是代碼:

class database{

  private $conn;
  private $sqlError;

   public function __construct() {
      $server = "localhost";
      $username = "user";
      $pass = "password";
      $database = 'dbname';
      $dsn = sprintf('mysql:dbname=%s;host=%s', $database, $server);
      try {
          $this->conn = new PDO($dsn, $username, $pass);
      } catch (Exception $exc) {
          $this->sqlError = 'SQL Error: ' . $exc->getCode();
      }
  }

    public function Select($query, $values=array()) {
      unset($this->sqlError);
      try {
          $qry = $this->conn->prepare('select ' . $query);
          echo $qry;    //invalid operation, I expect exception to be thrown
          $qry->execute($values);
          $result = $qry->fetchAll(PDO::FETCH_OBJ);
          $error = $qry->errorInfo();
          if ($error[1]) {
              $this->sqlError = 'SQL Error: ' . $error[1];
          }
          return $result;
      } catch (Exception $exc) {
          $this->sqlError = 'SQL Error: ' . $exc->getCode();
      }
    }


}

Catchable Fatal Error不是異常,而是錯誤。 它不能由try / catch塊捕獲,而可以由自定義錯誤處理程序捕獲。 有關更多信息,請參見此答案

這行:

echo $qry;    //invalid operation, I expect exception to be thrown

您是正確的,它是無效的,但是拋出異常是錯誤的。 除非對象定義了有效的__toString()方法__toString() PDOStatement並未定義),否則嘗試將其強制轉換為字符串將生成PHP錯誤,而不是Exception。 這是因為試圖將對象轉換為字符串的代碼是PHP核心的一部分,而不是某個類中的任何內容。

如果要查看PDOStatement對象中包含的查詢,則需要訪問只讀屬性$stmt->queryString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM