[英]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.