Po dlouhé době jsem se dostal k programování většího projektu v PHP/MySQL. Proto jsem se rozhodl obnovit znalosti v této oblasti.
Asi nejstarší způsob jak se z PHP připojit k MySQL je rozšíření MySQL, které bylo zavedeno již ve verzi PHP2.0 (1997). O sedm let později bylo ve verzi PHP5.0 (2004) uvedeno nové rozšíření MySQLi, a o rok později ve verzi PHP5.1 (2005) i rozšíření PDO_MySQL (PHP Data Objects). V současnosti se nedoporučuje používat nejstarší rozšíření (MySQL).
Nové rozšíření zajišťují vyšší bezpečnost a mimo jiné zavádějí i tzv. prepared statements, které umožňují posílat dotazy do databáze efektivněji a bezpečněji.
PDO_MySQL
Toto rozšíření umožňuje přistupovat k MySQL databázi ve verzi 3.0 a vyšší. Připojení k databázi pomocí PDO může vypadat takto:
$dbOptions = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`', ); $db = new PDO('mysql:host=' . $MysqlServer . ';dbname=' . $MysqlDb . ';charset=utf8', $MysqlUser, $MysqlPwd, $dbOptions);
Prvním argumentem konstruktoru třídy PDO je DSN řetězec specifikující připojení k databázi, poté následuje login a heslo. Prvním nepovinným parameterem je pole obsahující instrukce pro ovladač. V našem případu jsou použity pouze dvě, první říká, že chyby chceme odchytávat v podobě výjimek a druhá obsahuje příkaz, který se má vykonat okamžitě po připojení k databázi. Těchto konstant je pro MySQL dostupné poměrně velké množství.
Vkládání záznamů
PDO stejně jako MySQL podporuje tzv. Prepared Statements, které lze využít jak pro vkládání a úpravu záznamů, tak pro jejich vybírání z databáze. Následující kousek kódu ukazuje, jak vložit dva řádky do databáze.
$sth = $db->prepare("INSERT INTO `pdo` (`Jmeno`, `Prijmeni`, `Cislo`) VALUES (?, ?, ?), (?, ?, ?)"); $result = $sth->execute(array("Josef", "Novák", 123456789, "Kamil", "Procházka", 987654321));
Pomocí metody prepare() si připravíme SQL dotaz, kde jsou místo neznámých položek otazníky. Na jejich místo vložíme požadovaná data pomocí pole, které je argumentem metody execute(). Vložená data pak vypadají takto:
Jméno | Příjmení | Číslo |
---|---|---|
Josef | Novák | 123456789 |
Kamil | Procházka | 987654321 |
Jestli bylo vložení úspěšné si můžeme ověřit pomocí kódu:
echo 'Počet úspěšně vložených řádků: '.$sth->rowCount().'.
';
Výběr dat
$sql = "SELECT `ID`, `Jmeno`, `Prijmeni`, `Cislo`, Date_Format(`Datum`, '%H:%i:%s') AS `Datum` FROM `pdo`"; $sth = $db->prepare($sql); $sth->execute(); echo '
' . $result['ID'] . ' | ' . $result['Datum'] . ' | ' . $result['Jmeno'] . ' | ' . $result['Prijmeni'] . ' | ' . $result['Cislo'] . ' |
Kód je jednoduchou ukázkou výběru dat z tabulky. Metoda fetch() se chová podobně, jako funkce mysql_fetch_*. Parametr metody určuje, jakým způsobem získáme data:
- PDO::FETCH_ASSOC – asociativní pole
- PDO::FETCH_NUM – číselné pole
- PDO::FETCH_BOTH – asociativní i číselné pole
Pokud chceme z databáze vytáhnout pouze jeden údaj, lze použít i zkrácený zápis:
$sth = $db->prepare("SELECT `Cislo` FROM `pdo` WHERE `Prijmeni` = ?"); $sth->execute(array("Procházka")); $cislo = $sth->fetchColumn();
Závěr
Toto byl pouze jednoduchý úvod k použití PDO k připojení k databázi MySQL. PDO samozřejmě umožňuje podstatně víc, pro zájemce uvádím pár zajímavých odkazů.