2

だから私はPDOに移行するのに忙しく(はい、私はまだそのような古い学校のmysqlドライバーです)、これまで例外を使用したことはありません。以下の私のコードは、私がこれまでに理解したことに基づいています。これが必要になる私のアプリケーションは、3つの別々のデータベース接続を作成します。そのうちの2つはmysqlと1つのmssqlです(したがって、そうでない場合はタイプ)。

問題は、間違った接続値を指定しても、スクリプトを処理して続行し、エラーがなかったかのように「キャッチ」を完全にスキップすることです。基本は次のとおりであることを理解しています。

 try {
      if("condition" != "conditions") {
           throw new Exception("Oops I did it again");
      }
 catch(Exceptions as e) {
       echo $e->getMessage();
 }

また、PDOは例外を通過するので、投げる必要はありませんが、うまくいかないので、助けてください。また、この概念について私が誤解していることについてもう少し見落としを与えてください。

 // connect(): Connect to a database (MySQL):

private function connect($cred) {
    $type = $cred['type'];
    if($type == "mysql") {
        try {
            $handler = new PDO("mysql:host".$cred['credentials']['server'].";dbname=".$cred['credentials']['database'].", ".$cred['credentials']['username'].",".$cred['credentials']['password']);
            if($cred['errors'] == 'exception') {
                $handler->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            } elseif($cred['errors'] == 'warning') {
                $handler->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
            } else {
                $handler->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
            }
        }
        catch(PDOException $e) {
            $this->informer("FATAL","An error has occured trying to connect to the connection (".$cred['name'].") -".$e->getMessage());
            return false;
        }
        return $handler;
    }
}
4

2 に答える 2

0

問題が見つかりました。これは、上記のPDO異議申し立ての作成における構文の問題でした。

 $handler = new PDO("mysql:host".$cred['credentials']['server'].";dbname=".$cred['credentials']['database'].", ".$cred['credentials']['username'].",".$cred['credentials']['password']);

そしてそれはそうあるべきだった:

 $handler = new PDO("mysql:host=".$cred['credentials']['server'].";dbname=".$cred['credentials']['database'].", ".$cred['credentials']['username'].",".$cred['credentials']['password']);
于 2012-06-05T09:52:19.120 に答える
0

ここで推測しているだけですが、コンストラクターからPDO例外を受け取るには、new呼び出しで属性を渡す必要がある場合があります。

new PDO($dsn, $user, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));

アップデート

テストしたばかりですが、属性を渡さなくても例外がスローされます。

于 2012-06-05T10:01:10.803 に答える