sql >> Database teknologi >  >> RDS >> Mysql

Hvordan går jeg gennem mysql-resultatsættet i fatfree framework?

DB-forespørgsel

Der er 3 varianter til at gennemgå db-resultater:

Uden mapper:

Udfør en SQL-forespørgsel og hent resultatsættet som en matrix af associative arrays:

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

Med mapper->indlæs:

Hent mapper-rækker én efter én (din metode):

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

Med mapper->find:

Hent resultatsættet som en række kortlæggere:

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

DB-fejlhåndtering

\DB\SQL er en underklasse af PDO, så den kan give fangbare PDO-undtagelser. Da disse er deaktiveret som standard, skal du først aktivere dem. Dette kan gøres på 2 forskellige måder:

  • ved instansieringstidspunktet for alle transaktioner:

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

  • senere i koden, på basis af transaktioner:

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

Når PDO-undtagelser er aktiveret, skal du bare fange dem som andre undtagelser:

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

Dette fungerer også med DB-mappere, da de er afhængige af den samme DB\SQL-klasse:

$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. 7 strategier til at få mest muligt ud af dine møder

  2. MySQL - Hvordan kaster man undtagelser i lagret procedure?

  3. Skrivning af en underforespørgsel ved hjælp af Zend DB

  4. SQL Server datoformat funktion