Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengambil informasi kesalahan yang diperluas dari operasi terbaru pada handel database.
Sintaks
array PDO::errorInfo();
Tampilkan Nilai
Array informasi kesalahan tentang operasi terbaru pada handel database. Array terdiri dari bidang berikut:
Kode kesalahan SQLSTATE.
Kode kesalahan khusus driver.
Pesan kesalahan khusus driver.
Jika tidak ada kesalahan, atau jika SQLSTATE tidak diatur, maka bidang khusus driver adalah NULL.
Keterangan
PDO::errorInfo hanya mengambil informasi kesalahan untuk operasi yang dilakukan langsung pada database. Gunakan PDOStatement::errorInfo saat instans PDOStatement dibuat menggunakan PDO::p repare atau PDO::query.
Dukungan untuk PDO ditambahkan di Driver Microsoft versi 2.0 untuk PHP untuk SQL Server.
Contoh
Dalam contoh ini, nama kolom salah eja (Cityx bukan City), menyebabkan kesalahan, yang kemudian dilaporkan.
<?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());
?>
Pesan ODBC tambahan
Ketika pengecualian terjadi, Driver ODBC dapat mengembalikan lebih dari satu kesalahan untuk membantu mendiagnosis masalah. Namun, PDO::errorInfo selalu hanya menunjukkan kesalahan pertama. Menanggapi laporan bug ini, PDO::errorInfo dan PDOStatement::errorInfo telah diperbarui untuk menunjukkan bahwa driver harus menampilkan setidaknya tiga bidang berikut:
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.
Dimulai dengan 5.9.0, perilaku default PDO::errorInfo adalah menampilkan kesalahan ODBC tambahan, jika tersedia. Contohnya:
<?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);
}
?>
Menjalankan skrip di atas seharusnya melemparkan pengecualian, dan outputnya seperti ini:
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."
}
Jika pengguna lebih suka dengan cara sebelumnya, opsi pdo_sqlsrv.report_additional_errors konfigurasi baru dapat digunakan untuk menonaktifkannya. Cukup tambahkan baris berikut di awal skrip php apa pun:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
Dalam hal ini, info kesalahan yang ditampilkan akan seperti ini, saat menjalankan contoh skrip yang sama:
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'."
}
Jika perlu, pengguna dapat memilih untuk menambahkan baris berikut ke file php.ini untuk menonaktifkan fitur ini di semua skrip php mereka:
pdo_sqlsrv.report_additional_errors = 0
Peringatan dan kesalahan
Dimulai dengan 5.9.0, peringatan ODBC tidak akan lagi dicatat sebagai kesalahan. Artinya, kode kesalahan dengan awalan "01" dicatat sebagai peringatan. Dengan kata lain, jika pengguna hanya ingin mencatat kesalahan, perbarui php.ini seperti ini:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
Dalam hal ini, file log tidak akan berisi pesan peringatan apa pun. Silakan periksa cara kerja pengelogan untuk pengguna pdo_sqlsrv.