PDO ile gerçekleştirdiğimiz sorgularda oluşan hataları ekrana basıp görebilmek için
<?
/* Bir hata oluşturalım --BONES diye bir tablo olmasın */
$dbh->exec("INSERT INTO bones(skull) VALUES ('lucy')");
echo "\nPDO::errorCode(): ";
print $dbh->errorCode();
?>
metodunu kullanabiliriz. $dbh PDO nesnesini oluşturduğumuz değişken, kendi örneğinizde bu değişkenin sizdeki karşılığını kullanmalısınız.
Bu örneğin çıktısı,
PDO::errorCode(): 42S02
Bu metodu kullandık ancak ekrana sadece hata kodunu yazdırdık Hata kodu bizim için yeterince açıklayıcı değilse, aşağıdaki metodu kullanabiliriz.
<?
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>
Bu örneğin çıktısı,
PDO::errorInfo():
Array
(
[0] => HY000
[1] => 1
[2] => near "bozuk": syntax error
)
Biraz daha ayrıntıya ihtiyacımız var dersek bu durumda PDO’ nun hataların nasıl ele alacağını etkileyen PDO::ATTR_ERRMODE yapılandırmasını PDO nesnesini oluşturduğumuz sırada düzenlemeliyiz. Bu yapılandırma aşağıdaki değerleri alabiliyor.
PDO::ERRMODE_SILENT // Varsayılan Ayar
Bu öntanımlı kiptir. PDO, gerek veritabanı gerekse deyim nesneleri üzerinde PDO::errorCode() vePDO::errorInfo() işlevlerini kullanarak hata kodunu sizin için hazır hale getirir. Eğer hata bir deyim nesnesiyle ilgili bir işlev veya yöntem çağrısından kaynaklanmışsa bu nesne üzerinde PDOStatement::errorCode() veyaPDOStatement::errorInfo() işlevini kendiniz çağırmalısınız. Eğer hata bir veritabanı nesnesiyle ilgili bir işlev veya yöntem çağrısından kaynaklanmışsa bu işlevleri bu kez veritabanı nesnesi üzerinde çağırmalısınız.
PDO::ERRMODE_WARNING
Hata kodu ayarlarına ek olarak, PDO geleneksel bir E_WARNING uyarısı da verir. Bu kip, hata ayıklama ve denemeler sırasında uygulama akışının kesilmeden oluşan sorunları görmek için kullanışlıdır.
PDO::ERRMODE_EXCEPTION
Hata kodu ayarlarına ek olarak, PDO bir PDOException istisnası oluşturup hata kodunu ve iletisini nesnenin özelliklerine yerleştirir. Bu kip de hata ayıklama sırasında uygulama akışının kesilmeden oluşan sorunları çabucak görüp müdahale etmek için kullanışlıdır. (Dikkat: Eğer istisna betiğin sonlanmasına sebep olursa veri hareketleri (transactions) özdevinimli olarak başa sarılır.)
Bu kip bir istisna nesnesi ile çalıştığından, hataların, her veritabanı çağrısında dönen değere bakmaktan, sessiz kipi kullanmaktan ve geleneksel PHP tarzı uyarılardan daha iyi ve daha kolay işleme sokulmasını sağlar.
PHP’deki istisna nesneleri hakkında bilgi edinmek için İstisnalar bölümüne bakınız.
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
Canlı / ürün ortamında PDO::ERRMODE_SILENT
geliştirme ortamında ise PDO::ERRMODE_EXCEPTION
yapılandırmasını kullanmak daya uygundur.
Kaynaklar:
http://php.net/manual/tr/pdo.error-handling.php
https://stackoverflow.com/questions/8776344/how-to-view-query-error-in-pdo-php
http://php.net/manual/tr/pdo.errorcode.php
http://php.net/manual/tr/pdo.errorinfo.php