これは本当に変わったようです。以下のクラスはうまく動作し、間違ったパスワードでFatal error: Uncaught exception 'PDOException'
と表示されます。PHP PDO例外と例外strangeness
ただし、catch{Eception...
をcatch{Exception...
に置き換えると、間違ったパスワードが表示されますが、エラーは表示されません。
私は
$class_methods = get_class_methods(new Eception);
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
を試したし、クラスが存在しないので、Exception
がないときになぜそれが私のDatabaseクラスで動作しますか?
<?php
class Database{
private $host = 'localhost';
private $user = 'root';
private $pass = 'wrong_password';
private $dbname = 'blog';
private $dbh;
private $error;
private $stmt;
public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create new PDO
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
} catch(Eception $e){ // weird behaviour with Exception vs Eception
$this->error = $e->getMessage();
}
}
}
OK、EceptionをExceptionに変更し、 '$ e-> getMessage()'をエコーしました。今私はいいクリーンなエラーメッセージがあります。ありがとう。 – Robin
@Robin $ e-> getMessage()をエコーしてはいけません。きれいなエラーメッセージが表示されないようにしてください。あなたはあなたのサイトの唯一のユーザーではありません。 –
もちろん、学習目的のためにこれは問題ありません。 – Robin