2016-07-13 11 views
2

Ich habe ein Skript wie folgt:Wie kann ich beide PDO-Ausnahmen und die anderen erhalten?

try { 
    $stm = $dbh->prepare("INSERT .. SELECT query"); 
    $stm->execute(); 
    if ($stm->rowCount() > 0) { 
     echo 'inserted'; 
    } else { 
     throw new Exception('No rows inserted'); 
    } 
} catch(Exception $e) { 
    echo $e; 
} 

Wie Sie sehen, dass catch Block Exception s gerade zugreift, die ich festgelegt haben. Eigentlich muss ich auch auf die PDO-Ausnahme zugreifen. Etwas wie dieses:

} catch(Exception $e, PDOException $pdo) { 
    echo isset($pdo) ? "other message: " . $e : null; 
    echo isset($e) ? "PDO message: " . $pdo : null; 
} 

Wie Sie wissen, ist meine gegenwärtige Syntax falsch. Ich spreche über catch(Exception $e, PDOException $pdo). Nun, gibt es einen Workaround?

+0

Sie eine PDO Exception-Instanz werfen kann, und in catch-Block Nur PDOException verarbeiten. wie try {neue PDOException werfen ('No rows inserted')} catch (PDOException $ e) {echo $ e-> getErrorMessage} –

+0

'Exception' fängt auch' PDOException' ab, da letzterer von ersterem erbt. – deceze

+1

Ich bin mir nicht sicher, ob ich das Q verstehe. Ihr catch-Block ist bereits eingerichtet, um eine PDOException zu erfassen, wenn sie auftritt, und auch Ihre zu fangen. Sie würden nicht zur selben Zeit auftreten, weil die PDO-Operation abgeschlossen sein muss, ohne eine Ausnahme von sich selbst zu werfen, damit Ihre Ausnahme ausgelöst wird. – BeetleJuice

Antwort

4

können Sie mehrere verwenden catch-Blöcke

catch(PDOException $pdo) { 
    echo $pdo; 
} 
catch(Exception $e) { 
    echo $e; 
} 

Oder Sie können nach wie vor ein catch-Block halten und Hilfe nehmen von instanceof

catch(Exception $e) { 
    if($e instanceof PDOException) 
     // pdoexception 
    else 
     // others 
} 
+0

Meinst du einen "Versuch" und zwei "Fang"? Ist das möglich? – Shafizadeh

+0

Ja, natürlich ist es möglich –

+0

Cool .. thx +1 ..! – Shafizadeh