PHP prakticky/Připojení k databázi
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 a MariaDB databázi několika způsoby:[1]
- MySQL - tento způsob je od verze PHP 5.5.0 označen jako zastaralý, PHP 7 již tyto funkce neobsahuje
- MySQLi[2] - toto rozšíření je dostupné od verze PHP 4.1, procedurální i objektové
- PDO - objektový způsob pro připojení k databázi[3]
Připojení a výběr databáze
[editovat | editovat zdroj]Celé je to velice jednoduché. Pokud se chceme připojit, stačí zadat:
<?php
$mysqli = new mysqli("localhost", "testik", "testik", "testik");
?>

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.). V nových verzích PHP (rok 2025 PHP 8.4) již mysql_connect nelze použít, protože od verze PHP 5.5.0 to bylo označeno jako překonané (zastaralé) a od verze PHP 7.0.0 byla podpora mysql_connect úplně odstraněna.[4] Je doporučeno použít rozšíření MySQLi nebo PDO a parametrizované dotazování[5] jako ochrana proti SQL injekci[6][7].
Ukázka moderního připojení k databázi MariaDB pomocí PHP a rozšíření MySQLi:[8][9][10]
<?php
try {
$mysqli = new mysqli("localhost", "testik", "testik", "testik");
echo "Připojení k databázi se zdařilo!";
} catch (Exception $e) {
echo "Připojení k databázi se nezdařilo!<br>".$e->getMessage();
exit;
}
if ($mysqli->character_set_name()!="utf8mb4") { $mysqli->set_charset("utf8mb4"); }
$mysqli->close(); // ukončení spojení k MariaDB
?>
Zastaralé způsoby v roce 2025 již nefunkční:
<?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 | editovat zdroj]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 | editovat zdroj]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 | editovat zdroj]- ↑ Choosing an API
- ↑ Práce s MySQL v PHP - Použití ovladače MySQLi [online]. [Cit. 2025-09-28]. Dostupné online.
- ↑ MySQL Functions (PDO_MYSQL)
- ↑ https://www.php.net/manual/en/function.mysql-connect.php
- ↑ Parametrizované SQL dotazy
- ↑ Ochrana proti SQL injection
- ↑ Jak se bránit SQL injekci
- ↑ Objektové používání rozšíření MySQLi
- ↑ try-catch
- ↑ exception v PHP