sql >> Databasteknik >  >> RDS >> Mysql

Hur går jag igenom mysql-resultatuppsättningen i fatfree-ramverket?

DB-förfrågan

Det finns 3 varianter för att gå igenom db-resultat:

Utan kartläggare:

Kör en SQL-fråga och hämta resultatuppsättningen som en array av associativa arrayer:

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

Med mapper->load:

Hämta mapparrader en efter en (din metod):

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

Med mapper->hitta:

Hämta resultatuppsättningen som en array av kartläggare:

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

DB-felhantering

\DB\SQL är en underklass av PDO så att den kan skapa fångbara PDO-undantag. Eftersom dessa är inaktiverade som standard måste du aktivera dem först. Detta kan göras på två olika sätt:

  • vid instansiering, för alla transaktioner:

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

  • senare i koden, per transaktion:

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

När PDO-undantag har aktiverats, fånga dem bara som andra undantag:

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

Detta fungerar även med DB-mappare, eftersom de förlitar sig på samma DB\SQL-klass:

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


  1. Windows:XAMPP vs WampServer vs EasyPHP vs alternativ

  2. Normalisera arraysänkningar för 1-dimensionell array så att de börjar med 1

  3. Ställa in MySQL root-användarlösenordet på OS X

  4. Lagrad procedur som exporterar data till csv-filer exporterar endast till en fil