Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como faço um loop pelo conjunto de resultados do mysql no framework fatfree?

Consulta de banco de dados


Existem 3 variantes para percorrer os resultados do db:

Sem mapeador:


Execute uma consulta SQL e busque o conjunto de resultados como um array de arrays associativos:
$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
  echo $user['name'];//associative array

Com mapeador->carregar:


Busque as linhas do mapeador uma a uma (seu método):
$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
  echo $user->name;//db mapper
  $user->next();
}

Com mapeador->localizar:


Busque o conjunto de resultados como uma matriz de mapeadores:
$mapper=new \DB\SQL\Mapper($db,'users');
$users=$mapper->find('');
foreach($users as $user)
  echo $user->name;//db mapper

Tratamento de erros de banco de dados


\DB\SQL é uma subclasse de PDO, portanto, pode lançar exceções de PDO capturáveis. Como eles estão desabilitados por padrão, você precisa habilitá-los primeiro. Isso pode ser feito de 2 maneiras diferentes:

  • no momento da instanciação, para todas as transações:

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

  • posteriormente no código, por transação:

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

Uma vez que as exceções de PDO estejam habilitadas, apenas capture-as como outras exceções:
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)
}

Isso também funciona com mapeadores de banco de dados, pois eles dependem da mesma 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
}