Kueri DB
Ada 3 varian untuk mengulang hasil db:
Tanpa pembuat peta:
Jalankan kueri SQL dan ambil hasil yang ditetapkan sebagai larik larik asosiatif:
$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
echo $user['name'];//associative array
Dengan mapper->muat:
Ambil baris pembuat peta satu per satu (metode Anda):
$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
echo $user->name;//db mapper
$user->next();
}
Dengan mapper->temukan:
Ambil hasil yang ditetapkan sebagai larik pembuat peta:
$mapper=new \DB\SQL\Mapper($db,'users');
$users=$mapper->find('');
foreach($users as $user)
echo $user->name;//db mapper
Penanganan kesalahan DB
\DB\SQL adalah subkelas dari PDO sehingga dapat membuang pengecualian PDO yang dapat ditangkap. Karena ini dinonaktifkan secara default, Anda harus mengaktifkannya terlebih dahulu. Ini dapat dilakukan dengan 2 cara berbeda:
-
pada waktu instantiasi, untuk semua transaksi:
$db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));
-
nanti dalam kode, per transaksi:
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
Setelah pengecualian PDO diaktifkan, tangkap saja sebagai pengecualian lain:
try {
$db->exec('INSERT INTO mytable(id) VALUES(?)','duplicate_id');
} catch(\PDOException $e) {
$err=$e->errorInfo;
//$err[0] contains the error code (23000)
//$err[2] contains the driver specific error message (PRIMARY KEY must be unique)
}
Ini juga berfungsi dengan pembuat peta DB, karena mereka mengandalkan kelas DB\SQL yang sama:
$db=new \DB\SQL($dsn,$user,$pwd,array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION));
$mytable=new \DB\SQL\Mapper($db,'mytable');
try {
$mytable->id='duplicate_id';
$mytable->save();//this will throw an exception
} catch(\PDOException $e) {
$err=$e->errorInfo;
echo $err[2];//PRIMARY KEY must be unique
}