V PHP existuje několik funkcí pro získání obsahu řádku z MySQL tabulky. Kromě nejvíce používané mysql_fetch_array jsou k dispozici ještě další tři: mysql_fetch_assoc vrátí sloupce v poli indexovaném názvy sloupců, mysql_fetch_row v poli indexovaném pořadím sloupců a mysql_fetch_object v objektu. mysql_fetch_array vrátí pole indexované jak názvy sloupců, tak jejich pořadím (pokud není druhým parametrem řečeno jinak) a protože tuto vlastnost nikdy nepotřebuji, tak ji zásadně nepoužívám. Díky tomu lze celý řádek např. jednoduše vypsat funkcí implode.
Nejčastěji používám funkci mysql_fetch_assoc a pokud je ve více tabulkách sloupec stejného jména, tak vytvořím alias:
<?php $result = mysql_query(" SELECT vyrobky.id, vyrobky.nazev, skupiny.nazev AS skupina_nazev FROM vyrobky INNER JOIN skupiny ON vyrobky.skupina = skupiny.id "); ?>
Nevyhýbám se používání SELECT *
, protože to pomáhá při rozšiřování kódu – pokud se rozhodnu výpis rozšířit např. o cenu, stačí při použití SELECT *
do výpisu doplnit $row["cena"]
, pokud jsou vyjmenované všechny sloupce, je nutné to doplnit na dvě místa. Hvězdičce se vyhýbám pouze v případě, kdy databázový server běží na jiném stroji a tabulka obsahuje objemná data, která při výpisu nepotřebuji (např. text článku u výpisu jejich nadpisů), protože režie spojená s přenosem dat je už zbytečně velká. SELECT *
je také nevhodné používat v případě, kdy dotaz pracuje s více tabulkami, tehdy je lepší použít SELECT tabulka.*
a sloupce z ostatních tabulek vyjmenovat explicitně.
Funkce mysql_fetch_row vede u větších výpisů k nepřehlednému kódu, protože na první pohled není patrné, co znamená např. $row[8]
. Tuto funkci proto používám jen ve výjimečných případech:
<?php /** Provedení MySQL dotazu a vrácení pole hodnot * @param string dotaz * @return array pole s klíči prvního sloupce dotazu a hodnotami druhého sloupce */ function mysql_get_vals($query) { $return = array(); $result = mysql_query($query); while ($row = mysql_fetch_row($result)) { $return[$row[0]] = $row[1]; } mysql_free_result($result); return $return; } ?>
Funkce se hodí např. pro získávání číselníků pro použití spolu se značkou <select>
.
Použití mysql_fetch_row se v každém případě vyhněte v kombinaci se SELECT *
, nikdy nemůžete vědět, kdy do tabulky přibude další sloupec.
Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.
Diskuse je zrušena z důvodu spamu.