Запитване в DB
Има 3 варианта за преглеждане на резултатите от db:
Без картограф:
Изпълнете SQL заявка и извлечете резултатния набор като масив от асоциативни масиви:
$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
echo $user['name'];//associative array
С mapper->товар:
Извличане на редове на картографа един по един (вашият метод):
$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
echo $user->name;//db mapper
$user->next();
}
С mapper->намери:
Извличане на резултатния набор като масив от картографи:
$mapper=new \DB\SQL\Mapper($db,'users');
$users=$mapper->find('');
foreach($users as $user)
echo $user->name;//db mapper
Обработка на DB грешки
\DB\SQL е подклас на PDO, така че може да хвърля уловени PDO изключения. Тъй като те са деактивирани по подразбиране, първо трябва да ги активирате. Това може да стане по 2 различни начина:
-
в момента на инстанциране, за всички транзакции:
$db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));
-
по-нататък в кода, за всяка транзакция:
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
След като PDO изключенията са разрешени, просто ги хванете като други изключения:
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)
}
Това работи и с DB картографи, тъй като те разчитат на един и същ 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
}