Truy vấn DB
Có 3 biến thể để lặp qua kết quả db:
Không có trình lập bản đồ:
Thực thi truy vấn SQL và tìm nạp tập kết quả dưới dạng một mảng các mảng kết hợp:
$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
echo $user['name'];//associative array
Với trình lập bản đồ-> tải:
Tìm nạp từng hàng của trình ánh xạ (phương pháp của bạn):
$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
echo $user->name;//db mapper
$user->next();
}
With mapper-> find:
Tìm nạp tập hợp kết quả dưới dạng một mảng các trình ánh xạ:
$mapper=new \DB\SQL\Mapper($db,'users');
$users=$mapper->find('');
foreach($users as $user)
echo $user->name;//db mapper
Xử lý lỗi DB
\ DB \ SQL là một lớp con của PDO nên nó có thể ném các ngoại lệ PDO có thể bắt được. Vì những tính năng này bị tắt theo mặc định, trước tiên bạn cần bật chúng lên. Điều này có thể được thực hiện theo 2 cách khác nhau:
-
tại thời điểm khởi tạo, cho tất cả các giao dịch:
$db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));
-
sau này trong mã, trên cơ sở mỗi giao dịch:
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
Sau khi các ngoại lệ PDO được bật, chỉ cần bắt chúng như các ngoại lệ khác:
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)
}
Điều này cũng hoạt động với các trình ánh xạ DB, vì chúng dựa trên cùng một lớp DB \ SQL:
$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
}