PDO için en çok önerilen hata modu olduğu göz önüne alındığında ERRMODE_EXCEPTION
, hiçbir doğrudan execute()
sonuç doğrulaması hiçbir zaman çalışmayacaktır . Kod yürütme, diğer yanıtlarda sunulan koşula bile ulaşmayacağından.
Dolayısıyla, PDO'da sorgu yürütme sonucunu işlemek için üç olası senaryo vardır:
- Başarıyı söylemek için hiçbir doğrulamaya gerek yoktur. Sadece program akışınıza uyun.
- Beklenmeyen hatayı gidermek için, aynı şekilde devam edin - acil işlem kodu gerekmez. Bir veritabanı hatası durumunda bir istisna atılır ve sonunda ortak bir 500 hata sayfasıyla sonuçlanacak olan site genelindeki hata işleyiciye yükselir.
- Yinelenen birincil anahtar gibi beklenen hatayı işlemek için ve bu belirli hatayı işleyecek belirli bir senaryonuz varsa, bir
try..catch
operatör kullanın .
Sıradan bir PHP kullanıcısı için kulağa biraz yabancı geliyor - bu nasıl, işlemin doğrudan sonucunu doğrulamak için değil? - ancak istisnalar tam olarak bu şekilde çalışır - hatayı başka bir yerde kontrol edersiniz. Her şey için bir kez. Son derece kullanışlı.
Yani, kısaca: normal bir kodda herhangi bir hata işlemeye ihtiyacınız yoktur. Kodunuzu olduğu gibi saklamanız yeterlidir:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!";
Başarı durumunda size bunu söyleyecektir, hata durumunda size uygulamanızın böyle bir durum için gösterdiği normal hata sayfasını gösterecektir.
Sadece hatayı bildirmekten başka bir işleme senaryonuz varsa , insert ifadenizi bir try..catch
operatöre koyun, beklediğiniz hata olup olmadığını kontrol edin ve düzeltin; veya - hata herhangi bir farklıysa - site genelindeki hata işleyicisi tarafından olağan şekilde ele alınmasını mümkün kılmak için istisnayı yeniden fırlatın . Aşağıda PDO ile hata işleme hakkındaki makalemdeki örnek kod bulunmaktadır :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
} else {
throw $e;
}
}
echo "Success!";
Yukarıdaki kodda, belirli bir hatayı bir işlem yapmak için kontrol ediyor ve bir programcıya rapor edilecek diğer herhangi bir hata için (örneğin böyle bir tablo yok) istisnayı yeniden fırlatıyoruz.
Yine de - bir kullanıcıya "Ekiniz başarılı" gibi bir şey söylemek için hiçbir koşul gerekmez.