Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie durchlaufe ich das MySQL-Resultset im Fatfree-Framework?

DB-Abfrage

Es gibt 3 Varianten, db-Ergebnisse durchzuschleifen:

Ohne Mapper:

Führen Sie eine SQL-Abfrage aus und rufen Sie die Ergebnismenge als Array assoziativer Arrays ab:

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

Mit Mapper->Laden:

Mapper-Zeilen einzeln abrufen (Ihre Methode):

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

Mit mapper->finden:

Holen Sie sich die Ergebnismenge als Array von Mappern:

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

DB-Fehlerbehandlung

\DB\SQL ist eine Unterklasse von PDO, sodass abfangbare PDO-Ausnahmen ausgelöst werden können. Da diese standardmäßig deaktiviert sind, müssen Sie sie zuerst aktivieren. Dies kann auf zwei verschiedene Arten erfolgen:

  • zum Instanziierungszeitpunkt für alle Transaktionen:

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

  • später im Code, pro Transaktion:

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

Sobald PDO-Ausnahmen aktiviert sind, fangen Sie sie einfach als andere Ausnahmen ab:

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

Dies funktioniert auch mit DB-Mappern, da sie auf die gleiche DB\SQL-Klasse angewiesen sind:

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