Zend\Db\Adapter\Adapter を使用して、PDO_Mysql ドライバーでクエリを起動しています。主キー違反を PDOException クラスでキャッチしたい。
次のコードは、例外を正しくキャッチし、最初のメッセージを表示します。これは、実行モードのクエリ メソッドに基づいています。
try {
$dbAdapter = new DbAdapter(array(
'driver' => 'Pdo_Mysql', 'database' => 'securedraw',
'username' => 'root', 'password' => '',));
$sql = "INSERT INTO users (mail, password) values('josep', 'josep')";
$dbAdapter->query($sql, DbAdapter::QUERY_MODE_EXECUTE);
}catch (\PDOException $e) {
print "First Message " . $e->getMessage() . "<br/>";
}catch (\Exception $e) {
print "Second Message: " . $e->getMessage() . "<br/>";
}
このコードはそれをキャッチしないため、わかりません (固有の変更点は、準備済みステートメントであることです)。
この場合、より一般的な 2 番目のメッセージが表示され、エラーが主キー違反であるかどうかは示されません。
try {
$dbAdapter = new DbAdapter(array(
'driver' => 'Pdo_Mysql', 'database' => 'securedraw',
'username' => 'root', 'password' => '',));
$sql = "INSERT INTO users (mail, password) values('josep', 'affsafq')";
$statement = $dbAdapter->createStatement($sql);
$statement->execute();
}catch (\PDOException $e) {
print "First Message " . $e->getMessage() . "<br/>";
}catch (\Exception $e) {
print "Second Message: " . $e->getMessage() . "<br/>";
}