Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment parcourir le jeu de résultats mysql dans un framework sans graisse?

Interrogation de la base de données

Il existe 3 variantes pour parcourir les résultats de la base de données :

Sans mappeur :

Exécutez une requête SQL et récupérez le jeu de résultats sous la forme d'un tableau de tableaux associatifs :

$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
  echo $user['name'];//associative array

Avec mappeur->charger :

Récupérer les lignes du mappeur une par une (votre méthode) :

$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
  echo $user->name;//db mapper
  $user->next();
}

Avec mapper->trouver :

Récupérez le jeu de résultats sous la forme d'un tableau de mappeurs :

$mapper=new \DB\SQL\Mapper($db,'users');
$users=$mapper->find('');
foreach($users as $user)
  echo $user->name;//db mapper

Gestion des erreurs de base de données

\DB\SQL est une sous-classe de PDO et peut donc lancer des exceptions PDO capturables. Comme ceux-ci sont désactivés par défaut, vous devez d'abord les activer. Cela peut être fait de 2 manières différentes :

  • au moment de l'instanciation, pour toutes les transactions :

    $db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));

  • plus loin dans le code, transaction par transaction :

    $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

Une fois les exceptions PDO activées, interceptez-les simplement comme d'autres exceptions :

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)
}

Cela fonctionne également avec les mappeurs de base de données, car ils reposent sur la même classe 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
}