PHP/MySQL – využití ovladače PDO

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 '';
while ($result = $sth->fetch(PDO::FETCH_ASSOC))
{
  echo '';
}
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ů.

Odkazy

  1. php.net – PDO
  2. ITNetwork – Použití ovladače PDO
  3. PDO Tutorial for MySQL Developers

Leave a Reply

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..