PHP prakticky/Připojení k databázi

Z Wikiknih
Skočit na navigaci Skočit na vyhledávání

V této kapitole se naučíme připojovat k databázi MySQL v PHP a pokládat jí dotazy, vše s praktickými příklady.

PHP umožňuje připojení k MySQL databází několika způsoby:[1]

  1. MySQL rozšíření - tento způsob je od verze PHP 5.5.0 označen jako zastaralý, PHP 7 již tyto funkce neobsahuje
  2. MySQL rozšíření - toto rozšíření je dostupné od verze PHP 4.1
  3. PDO_MySQL - doporučovaný způsob pro připojení k databázi[2]

Připojení a výběr databáze[editovat]

Celé je to velice jednoduché. Pokud se chceme připojit, stačí zadat:

<?php
mysql_connect($localhost, $user, $password);
?>

Místo localhost se zadává adresa serveru, kde se nachází databáze. Často je databáze na stejném serveru jako webový server (localhost), většina českých free serverů, např. ic.cz, webzdarma.cz apod. má databázi na subdoméně (mysql.ic.cz, mysql.webzdarma.cz apod.).

<?php
$localhost = "mysql.webzdarma.cz";
$user = "wikipedia";
$password = "c3bk2pLtaQ5q";
mysql_connect($localhost, $user, $password);

//nebo

mysql_connect("mysql.webzdarma.cz", "wikipedia", "c3bk2pLtaQ5q");
?>

Nelekněte se, že heslo není zašifrováno. PHP skripty jsou uloženy na serveru, a tak by se k uživateli nemělo nikdy dostat (pokud neuvažujeme o prolomení zabezpečení serveru).

Výběr databáze[editovat]

Výběr databáze je taky velice jednoduchá záležitost, která se skládá z jedné funkce. Tuto funkci nepoužívejte, pokud pracujete s více databázemi najednou.

<?php
mysql_select_db($databaze);
?>

Na free serverech dostanete pouze jednu databázi k jedné doméně. Většinou je na free serverech jméno databáze stejné jako přihlašovací jméno do databáze.

Celý kód pro lepší představu:

<?php
//proměnné pro připojení a výběr databáze
$localhost = "mysql.webzdarma.cz";
$user = "wikipedia";
$password = "c3bk2pLtaQ5q";
$databaze = "wikipedia";

mysql_connect($localhost, $user, $password)
             or die("Nepodařilo se připojit k databázi");
//připojíme se k databázi; pokud se to nepodaří, vypíšeme text
mysql_select_db($databaze)
               or die("Nepodařilo se zvolit databázi");
?>

Určitě jste si všimli volitelné části or die("..."), která se zadává za příkaz připojení a výběru databáze, pokud by se nezdařilo. Je to zkrácení tohoto kódu:

<?php
if(mysql_connect("localhost", "user", "c3bk2pLtaQ5q")){
  echo("Připojení k databázi bylo úspěšné...");
}
else{
  exit("Připojení do databáze se nepovedlo!");
}
?>

Připojení do více databází můžeme realizovat dvěma různými způsoby. Jsou-li všechny použité databáze na stejném DB serveru, stačí uvádět jméno databáze před názvem tabulky v každém SQL dotazu:

<?php
// (připojení k DB serveru tady neuvádím)
$db1 = "wikipedia";
$db2 = "wikibooks";
mysql_query("SELECT * FROM " . $db1 . ".pocitadlo"); // názvy databáze a tabulky se oddělují tečkou
mysql_query("SELECT * FROM $db2.uzivatele"); // a můžeme to zapsat i takto
//... další zpracování...
?>

Pokud jsou ale databáze na různých DB serverech, je potřeba navázat několik samostatných připojení. Všimněte si, že v tomto případě musíme u každé databázové funkce uvádět i identifikátor připojení. (Normálně je nepovinný; není-li uveden, PHP vezme to DB připojení, které bylo použité jako poslední.)

<?php
$cfg = array(
    'db1' => array(
        'server' => 'localhost', 'user' => 'user', 'password' => 'tajneheslo', 'db' => 'wikipedia'
    ),
    'db2' => array(
        'server' => 'mysql.example.com', 'user' => 'root', 'password' => '123456', 'db' => 'wikibooks'
    )
);
$db_local = mysql_connect($cfg['db1']['server'], $cfg['db1']['user'], $cfg['db1']['password']);
mysql_select_db($cfg['db1']['db'], $db_local);

$db_remote = mysql_connect($cfg['db2']['server'], $cfg['db2']['user'], $cfg['db2']['password']);
mysql_select_db($cfg['db2']['db'], $db_remote);

mysql_query("SELECT * FROM pocitadlo", $db_local); // provede dotaz nad lokální databázi "wikipedia"
mysql_query("SELECT * FROM uzivatele", $db_remote); // provede dotaz nad vzdálenou databází "wikibooks"
?>

Perzistentní připojení[editovat]

Pokud vaše webová aplikace běží na velmi vytíženém serveru, kde přichází tisíce SQL dotazů za sekundu, nebudete chtít, aby se pokaždé vytvářelo nové spojení s databází, jako to dělá mysql_connect(). Proto máme k dispozici funkci mysql_pconnect(), vytvářející tzv. perzistentní připojení. Opět musíme zadat všechny tři potřebné údaje.

<?php
mysql_pconnect("localhost", "user", "password");
mysql_select_db("test");
?>

Pro předpokládanou funkčnost mysql_pconnect musí být PHP na serveru nakonfigurováno jako webový modul. Naopak pokud se PHP skripty používají jako CGI skripty, chová se mysql_pconnect jako mysql_connect, tj. pokaždé vytvoří nové připojení a po zpracování skriptu je zase uzavře.

Reference[editovat]

  1. Choosing an API
  2. MySQL Functions (PDO_MYSQL)