Připojení PHP k MySQL
PHP 5 a novější mohou pracovat s databází MySQL pomocí:
- Rozšíření MySQLi ("i" znamená vylepšené)
- PDO (PHP Data Objects)
Dřívější verze PHP používaly rozšíření MySQL. Toto rozšíření však bylo v roce 2012 ukončeno.
Mám používat MySQLi nebo PDO?
Pokud potřebujete krátkou odpověď, byla by to „Cokoli chcete“.
MySQLi i PDO mají své výhody:
PDO bude fungovat na 12 různých databázových systémech, zatímco MySQLi bude fungovat pouze s databázemi MySQL.
Pokud tedy musíte svůj projekt přepnout na jinou databázi, PDO tento proces zjednoduší. Stačí změnit připojovací řetězec a pár dotazů. S MySQLi budete muset přepsat celý kód – včetně dotazů.
Oba jsou objektově orientované, ale MySQLi nabízí i procedurální API.
Oba podporují připravená prohlášení. Připravené příkazy chrání před SQL injection a jsou velmi důležité pro zabezpečení webových aplikací.
Příklady MySQL v syntaxi MySQLi i PDO
V této a v následujících kapitolách demonstrujeme tři způsoby práce s PHP a MySQL:
- MySQLi (objektově orientované)
- MySQLi (procedurální)
- CHOP
Instalace MySQLi
Pro Linux a Windows: Rozšíření MySQLi se ve většině případů automaticky nainstaluje, když je nainstalován balíček php5 mysql.
Podrobnosti o instalaci najdete na: http://php.net/manual/en/mysqli.installation.php
Instalace PDO
Podrobnosti o instalaci najdete na: http://php.net/manual/en/pdo.installation.php
Otevřete připojení k MySQL
Než budeme moci přistupovat k datům v databázi MySQL, musíme být schopni se připojit k serveru:
Příklad (Objektově orientovaný MySQLi)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Poznámka k výše uvedenému objektově orientovanému příkladu:
$connect_error byl nefunkční až do PHP 5.2.9 a 5.3.0. Pokud potřebujete zajistit kompatibilitu s verzemi PHP staršími než 5.2.9 a 5.3.0, použijte místo toho následující kód:
// Zkontrolujte připojení
if (mysqli_connect_error()) {
die("Připojení k databázi selhalo: " . mysqli_connect_error());
}
Příklad (Procedurální MySQLi)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
Příklad (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
Poznámka: Ve výše uvedeném příkladu PDO jsme také specifikovali databázi (myDB) . PDO vyžaduje platnou databázi pro připojení. Pokud není zadána žádná databáze, je vyvolána výjimka.
Tip: Velkou výhodou PDO je, že má třídu výjimek pro řešení jakýchkoli problémů, které se mohou vyskytnout v našich databázových dotazech. Pokud je v bloku try{ } vyvolána výjimka, skript se zastaví a přejde přímo k prvnímu bloku catch(){ }.
Zavřete připojení
Po skončení skriptu se připojení automaticky ukončí. Chcete-li ukončit připojení dříve, použijte následující:
Objektově orientované MySQLi:
$conn->close();
Postup MySQLi:
mysqli_close($conn);
CHOP:
$conn = null;