PHP 5 и следващите версии могат да работят с MySQL база данни, като използват разширение MySQLi (i означава подобрено – improved) или PDO (PHP Data Objects).
По-ранните версии на PHP използваха MySQL разширение (extension), което обаче бе премахнато през 2012 г.
Кой начин на свързване да ползваме – MySQLi или PDO?
Ако имате нужда от кратък отговор, той ще бъде – който Ви харесва повече.
Както MySQLi, така и PDO има своите предимства:
- PDO работи върху 12 различни системи за база данни, докато MySQLi ще работи само с MySQL база данни.
- Ако трябва да промените проекта си да ползва друга база данни, използването на PDO ще улесни процеса. Трябва само да промените кода за свързване и няколко заявки. В същата ситуация, ако ползвате MySQLi, ще трябва да пренапишете целия код заедно със заявките.
- И двата метода са обектно-ориентирани, но MySQLi предлага и процедурен API интерфейс.
- И двата метода поддържат Prepared Statements, които защитават от SQL инжекции и са много важни за сигурността на уеб приложенията.
В статията ще Ви покажем още как може да изградите връзка към MySQL база данни чрез MySQLi (обектно-ориентирана и процедурна) и чрез PDO синтаксис.
Пример с изграждане на MySQLi връзка (Object-Oriented)
<?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 "MySQLi Object-Oriented Connected successfully";
?>
Пример с изграждане на MySQLi връзка (Procedural-Oriented)
<?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 "MySQLi Procedural Connected successfully";
?>
Пример с изграждане на 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 "PDO Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
Предимство на PDO разширението е, че има клас на изключения (exception), за да се справя с всички проблеми, които могат да възникнат в заявките към базата данни. Ако се получи изключение в try {}
блока, скриптът спира изпълнението и намира директно първия catch () {}
блок.
Тест на кода от примерите
За да тестваме дали кодът в примерите работи, създадохме база данни, потребител и парола в cPanel. Също така създадохме и файл mysql-connection.php
, в който въведохме само кода без никакъв HTML, с един отварящ <?php
и затварящ таг ?>
. Между отделните блокове код вмъкнахме следния код, за да може статус съобщенията да бъдат на отделни редове:
echo "<br>";
Във файла заменихме database, username и password с информацията за нашата база данни.

Затваряне на връзката към MySQL сървъра
Връзката към сървъра се затваря автоматично, след като всички команди в скрипта бъдат изпълнени. Добра практика е да се добави като последен ред команда за затваряне на връзката. Обърнете внимание, че синтаксисът на командите при различните методи е различен.
Метод | Команда |
---|---|
MySQLi Object-Oriented | $conn->close(); |
MySQLi Procedural | mysqli_close($conn); |
PDO | $conn = null; |