Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veritabanı kolunda en son işlemin genişletilmiş hata bilgilerini alır.
Syntax
array PDO::errorInfo();
Dönüş Değeri
Veritabanı kolundaki en son işlemle ilgili bir hata bilgisi dizisi. Dizi aşağıdaki alanlardan oluşur:
SQLSTATE hata kodu.
Sürücüye özgü hata kodu.
Sürücüye özgü hata mesajı.
Hata yoksa veya SQLSTATE ayarlanmadıysa, sürücüye özgü alanlar NULL olur.
Remarks
PDO::errorInfo yalnızca veritabanında doğrudan gerçekleştirilen işlemler için hata bilgisini alır. PDO::p repare veya PDO::query kullanılarak oluşturulan bir PDOStatement örneği oluşturulduğunda PDOStatement::errorInfo kullanın.
PDO desteği, SQL Server için Microsoft Drivers for PHP sürümünün 2.0 sürümünde eklenmiştir.
Example
Bu örnekte, sütunun adı yanlış yazılmış (Cityx yerine City), bu bir hata yaratır ve bu hata raporlanır.
<?php
$conn = new PDO( "sqlsrv:server=(local) ; Database = AdventureWorks ", "");
$query = "SELECT * FROM Person.Address where Cityx = 'Essen'";
$conn->query($query);
print $conn->errorCode();
echo "\n";
print_r ($conn->errorInfo());
?>
Ek ODBC mesajları
Bir istisna meydana geldiğinde, ODBC Sürücüsü sorunları teşhis etmeye yardımcı olmak için birden fazla hata döndürebilir. Ancak PDO::errorInfo her zaman sadece ilk hatayı gösterir. Bu hata raporuna yanıt olarak, PDO::errorInfo ve PDOStatement::errorInfo sürücülerin en az aşağıdaki üç alanı göstermesi gerektiğini belirtecek şekilde güncellendi:
0 SQLSTATE error code (a five characters alphanumeric identifier defined in the ANSI SQL standard).
1 Driver specific error code.
2 Driver specific error message.
5.9.0'dan itibaren PDO::errorInfo'nun varsayılan davranışı, eğer mümkünse ek ODBC hatalarını göstermektir. Örneğin:
<?php
try {
$conn = new PDO("sqlsrv:server=$server;", $uid, $pwd);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SET NOCOUNT ON; USE $database; SELECT 1/0 AS col1");
$stmt->execute();
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
?>
Yukarıdaki betik çalıştırıldığında bir istisna olmalıydı ve çıktı şöyledir:
array(6) {
[0]=>
string(5) "01000"
[1]=>
int(5701)
[2]=>
string(91) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'tempdb'."
[3]=>
string(5) "22012"
[4]=>
int(8134)
[5]=>
string(87) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Divide by zero error encountered."
}
Kullanıcı önceki yolu tercih ederse, yeni bir yapılandırma seçeneği pdo_sqlsrv.report_additional_errors kullanılarak kapatılabilir. Herhangi bir php bebesinin başına aşağıdaki satırı ekleyin:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
Bu durumda, aynı örnek betik çalıştırıldığında gösterilen hata bilgisi şöyle olur:
array(3) {
[0]=>
string(5) "01000"
[1]=>
int(5701)
[2]=>
string(91) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'tempdb'."
}
Gerekirse, kullanıcı bu özelliği tüm php betiklerinde kapatmak için php.ini dosyasına aşağıdaki satırı ekleyebilir:
pdo_sqlsrv.report_additional_errors = 0
Uyarılar ve hatalar
5.9.0'dan itibaren ODBC uyarıları hata olarak kaydedilmeyecektir. Yani, "01" prefikli hata kodları uyarı olarak kaydedilir. Yani, kullanıcı sadece hataları kaydetmek istiyorsa, php.ini şu şekilde güncelleyin:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
Bu durumda, log dosyası herhangi bir uyarı mesajı içermez. Lütfen pdo_sqlsrv kullanıcılar için kayıt işlemlerinin nasıl çalıştığını kontrol edin.