DB क्वेरी करना
डीबी परिणामों के माध्यम से लूप करने के लिए 3 प्रकार हैं:
बिना मैपर के:
SQL क्वेरी निष्पादित करें और परिणाम सेट को साहचर्य सरणियों की एक सरणी के रूप में प्राप्त करें:
$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
echo $user['name'];//associative array
मैपर के साथ->लोड:
मैपर पंक्तियों को एक-एक करके प्राप्त करें (आपकी विधि):
$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
echo $user->name;//db mapper
$user->next();
}
मैपर के साथ->ढूंढें:
परिणाम सेट को मैपर की एक सरणी के रूप में प्राप्त करें:
$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);
एक बार पीडीओ अपवाद सक्षम हो जाने पर, बस उन्हें अन्य अपवादों के रूप में पकड़ें:
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
}