♠ Posted by Unknown at 08.26
PDO Error Handling
Kesalahan dalam penanganan PDO datang dalam beberapa rasa. Sebelumnya dalam tutorial ini kita telah hanya menggunakan sederhana try {} catch () {} block untuk menangkap kesalahan dalam koneksi database, tapi apa kesalahan lainnya? mungkin nama field tidak ada? Mari kita lihat bagaimana kita pergi dengan kesalahan sederhana dengan kode sebelumnya.
<?php/*** mysql hostname ***/$hostname = 'localhost';
/*** mysql username ***/$username = 'username';
/*** mysql password ***/$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
/*** The SQL SELECT statement with incorrect fieldname ***/
$sql = "SELECT username FROM animals";
foreach ($dbh->query($sql) as $row)
{
print $row['animal_type'] .' - '. $row['animal_name'] . '<br />';
}
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}?>
Connected to database
Warning: Invalid argument supplied for foreach() in /www/pdo.php on line 18
Hal ini karena tidak ada penanganan error. Pernyataan SELECT memiliki nama field 'username' yang tidak ada dan kesalahan yang dihasilkan oleh database. Satu-satunya penanganan kesalahan standar dilakukan dengan sambungan awal. Kecuali kita berurusan dengan kesalahan, kami memiliki masalah dengan menampilkan path lengkap ke dunia. Untuk mengatasi hal ini kita perlu mengatur atribut untuk jenis penanganan kesalahan kami ingin memanfaatkan jenis penanganan error sebagai berikut.
- Exception
- Warning
- Silent
<?php/*** mysql hostname ***/$hostname = 'localhost';
/*** mysql username ***/$username = 'username';
/*** mysql password ***/$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
/*** set the error reporting attribute ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*** The SQL SELECT statement ***/
$sql = "SELECT username FROM animals";
foreach ($dbh->query($sql) as $row)
{
print $row['animal_type'] .' - '. $row['animal_name'] . '<br />';
}
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}?>
Maka akan menghasilkan error sebagai berikut.
Connected to database
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'field list'
Biasanya kita tidak akan menunjukkan jenis kesalahan kepada pengguna akhir, dan pengecualian akan ditangani mungkin dengan pesan yang mengatakan Hasil pencarian tidak ditemukan atau sesuatu yang samar, namun hal ini menunjukkan bagaimana kita dapat mengatur modus kesalahan seperti yang kita inginkan. Untuk mengatur modus kesalahan untuk Warning harus terlihat mudah dari sini.
<?php/*** mysql hostname ***/$hostname = 'localhost';
/*** mysql username ***/$username = 'username';
/*** mysql password ***/$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
/*** set the error reporting attribute ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
/*** The SQL SELECT statement ***/
$sql = "SELECT username FROM animals";
foreach ($dbh->query($sql) as $row)
{
print $row['animal_type'] .' - '. $row['animal_name'] . '<br />';
}
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}?>
Connected to database
Warning: PDO::query() [function.PDO-query]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'field list' in /www/pdo.php on line 21
Warning: Invalid argument supplied for foreach() in /www/pdo.php on line 21
Di sini dan E_WARNING telah dihasilkan dan jika display_errors pada kesalahan akan dilihat oleh pengguna akhir. Diharapkan bahwa jika Anda berada di sebuah lingkungan produksi ini tidak terjadi.
Terakhir, ada modus Silent. Seperti namanya, mode ini membungkam kesalahan sehingga tidak ada output yang dikirim dari kesalahan. Namun, itu tidak menghentikan kode pada titik kesalahan dan kesalahan lebih lanjut masih dikirim.
<?php/*** mysql hostname ***/$hostname = 'localhost';
/*** mysql username ***/$username = 'username';
/*** mysql password ***/$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
/*** set the error reporting attribute ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
/*** The SQL SELECT statement ***/
$sql = "SELECT username FROM animals";
foreach ($dbh->query($sql) as $row)
{
print $row['animal_type'] .' - '. $row['animal_name'] . '<br />';
}
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}?>
Connected to database
Warning: Invalid argument supplied for foreach() in /www/pdo.php on line 21
Seperti yang Anda lihat, kesalahan telah dibungkam, namun error berikut belum diperhatikan, dan perlu pemeriksaan lebih lanjut untuk memastikan nilai yang diteruskan ke foreach adalah argumen yang valid.
Seperti yang kita lihat dengan kode pengecualian, kode SQLSTATE adalah bagian dari pesan kesalahan. Kode kesalahan ini juga tersedia dengan metode PDO::errorCode ().
<?php/*** mysql hostname ***/$hostname = 'localhost';
/*** mysql username ***/$username = 'username';
/*** mysql password ***/$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
/*** an invalide fieldname ***/$sql = "SELECT username FROM animals";
/*** run the query ***/$result = $dbh->query($sql);
/*** show the error code ***/echo $dbh->errorCode();?>
Connected to database
42S22
42S22
Informasi lebih lanjut tentang kesalahan dapat diperoleh dari metode PDO::ErrorInfo(). Ini mengembalikan array yang berisi SQLSTATE, kode kesalahan, dan pesan kesalahan.
<?php/*** mysql hostname ***/$hostname = 'localhost';
/*** mysql username ***/$username = 'username';
/*** mysql password ***/$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
}
catch(PDOException $e)
{
echo $e->getMessage();
}/*** an invalid table name ***/$sql = "SELECT animal_id FROM users";
/*** run the query ***/$result = $dbh->query($sql);
/*** show the error info ***/foreach($dbh->errorInfo() as $error)
{
echo $error.'<br />';
}?>
Connected to database
42S02
1146
Table 'animals.users' doesn't exist
Jika tidak ada kesalahan, SQLSTATE akan menjadi satu-satunya nilai yang ditampilkan, dengan nilai 00000.
Sumber : http://phpro.org/tutorials/Introduction-to-PHP-PDO.html
0 komentar:
Posting Komentar