Databáze – výběr dat

Metody

Třída db je v podstatě pouze statický wrapper pro aktivní spojení DbConnection. Na spojení voláme metodu query, která nám vrátí objekt DbResult, se kterým můžeme efektně pracovat. Uveďme si metody, které můžeme volat na DbResult:

  • fetch() – vrátí řádek dotazu
  • fetchAll() – vrátí pole všech řádků dotazu
  • fetchField() – vrátí první buňku dotazu
  • fetchPairs() – vrátí spárované první dva sloupce dotazu

Pokud výsledek obsahuje data z více tabulek, budou objekt automaticky ve více-tabulkovém módu.

Základní příklady použití:

$result = db::query('select * from table');

# získaní dat z celé tabulky
$rows = $result->fetchAll();

# získání pouze jednoho řádku
$row = $result->fetch();

# získání prvního pole
$field = $result->fetchField();

Celý zápis lze zkrátit pomocí wrapperů:

$rows = db::fetchAll('select * from table');
$row = db::fetch('select * from table');
$field = db::fetchField('select * from table');

$pairs = db::fetchPairs('select id, name from table');
# array(id => name);

Přístup k datům

Metody vracejí objekt DbResultNode, respektive pole těchto záznamů. Tento objekt představuje jeden databázový řádek. Díky array accessu je možné přistupovat k tomuto objektu klasicky jako k poli, stejně tak ale můžete využít běžné členské proměnné.

$data = db::fetch('select * from table_test limit 1');
echo $data->id;
echo $data->name;

# alternativně

echo $data['id'];
echo $data['name'];

Víceřádkový výsledek

Pokud chceme získat všechny řádky výsledku, používáme metodu fetchAll(), který vrací pole DbResultNode. Můžeme jednotlivé řádky jednoduše projít a vypsat jejich obsah.

$data = db::fetchAll('select * from table_test');
foreach ($data as $row) {
   echo $row->id;
   echo $row->name;
   echo "<hr />";
}

Pokud máme k dispozici objekt dotazu – ne přímo jeho data (pomocí Db::query()), pak můžeme jednoduše nechat rovnou iterovat tento objekt.

$query = db::query('select * from table_test');
foreach ($query as $row) {
...