Примеры использования PDO MySQL

Ниже приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и удаление данных. Подробнее о методах PDO можно узнать на php.net.

Для примеров используется таблица `category` с полями `id``name` и `parent`.

1

Подключение к серверу MySQL

$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
PHP

Четвертым параметром конструктора PDO можно указать параметры подключения, например SQL запрос который будет выполнен сразу после подключения:

$dbh = new PDO('
	mysql:dbname=db_name;host=localhost', 
	'логин', 
	'пароль', 
	array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
);
PHP

Чтобы отследить ошибку подключения к БД используется исключение:

try {
	$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
} catch (PDOException $e) {
	die($e->getMessage());
}
PHP
SQLSTATE[HY000] [1045] Access denied for user 'логин'@'localhost' (using password: YES)
2

Выборка из БД

Выборка одной записи

PDO позволяет использовать в запросах псевдопеременные чтобы исключить SQL инъекции. В самом запросе в место данных указывается ? или :id, а в методе execute() указываются реальные значения этих переменных.

$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = ?");
$sth->execute(array('21'));
$array = $sth->fetch(PDO::FETCH_ASSOC);
print_r($array);
PHP

или 

$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = :id");
$sth->execute(array('id' => '21'));
$array = $sth->fetch(PDO::FETCH_ASSOC);
print_r($array);
PHP
Array
(
	[id] => 21
	[parent] => 3
	[name] => Хурма
)

Выборка всех записей таблицы

Данный пример получает всю таблицу в виде ассоциативного массива:

$sth = $dbh->prepare("SELECT * FROM `category` ORDER BY `name`");
$sth->execute();
$array = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($array);
PHP
Array
(
	[0] => Array (
		[id] => 16
		[parent] => 3
		[name] => Абрикос
	)
	[1] => Array (
		[id] => 28
		[parent] => 3
		[name] => Авокадо
	)
	...
)

Получить значение поля одной записи

$sth = $dbh->prepare("SELECT `name` FROM `category` WHERE `id` = ?");
$sth->execute(array('21'));
$value = $sth->fetch(PDO::FETCH_COLUMN);
echo $value; // Выведет "Хурма"
PHP

Получение всех значений одного столбца таблицы

Пример получает все значения поля `name` из таблицы `category`.

$sth = $dbh->prepare("SELECT `name` FROM `category`");
$sth->execute();
$array = $sth->fetchAll(PDO::FETCH_COLUMN);
print_r($array);
PHP
Array
(
    [0] => Мороженое
    [1] => Овощи
    [2] => Фрукты
    [3] => Ягоды
    [4] => Грибы
    [5] => Морепродукты
    [6] => Смеси
	...
)

Получение структуры таблицы

$sth = $dbh->prepare("SHOW COLUMNS FROM `category`");
$sth->execute();
$array = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($array);
PHP
Array
(
    [0] => Array
        (
            [Field] => id
            [Type] => int(10) unsigned
            [Null] => NO
            [Key] => PRI
            [Default] => 
            [Extra] => auto_increment
        )
    [1] => Array
        (
            [Field] => parent
            [Type] => int(11) unsigned
            [Null] => NO
            [Key] => 
            [Default] => 0
            [Extra] => 
        )
    [2] => Array
        (
            [Field] => name
            [Type] => varchar(255)
            [Null] => NO
            [Key] => 
            [Default] => 
            [Extra] => 
        )
)
3

Добавление записей в БД

$sth = $dbh->prepare("INSERT INTO `category` SET `parent` = :parent, `name` = :name");
$sth->execute(array('parent' => 1, 'name' => 'Виноград'));

// Получаем id вставленной записи
$insert_id = $dbh->lastInsertId();
PHP
4

Изменение записей

$sth = $dbh->prepare("UPDATE `category` SET `name` = :name WHERE `id` = :id");
$sth->execute(array('name' => 'Виноград', 'id' => 22));
PHP
5

Удаление из БД

$count = $dbh->exec("DELETE FROM `category` WHERE `parent` = 1");
echo 'Удалено ' . $count . ' строк.';
PHP

Или метод c псевдопеременными:

$sth = $dbh->prepare("DELETE FROM `category` WHERE `parent` = :parent");
$sth->execute(array('parent' => 1));
PHP
6

Обработка ошибок

В PDO есть метод errorInfo() который возвращает сведенья об ошибке последнего запроса.

// Таблицы `category_new` нет в БД.
$sth = $dbh->prepare("INSERT INTO `category_new` SET `parent` = :parent, `name` = :name");
$sth->execute(array('parent' => 1, 'name' => 'Виноград'));

$info = $sth->errorInfo();
print_r($info);
PHP
Array
(
    [0] => 42S02
    [1] => 1146
    [2] => Table 'database.category_new' doesn't exist
)
11.11.2017, обновлено 27.08.2019 13588

Поделится

Темы

PHP БД

Другие публикации

Временные таблицы используются для хранения промежуточных данных при сложных выборках из БД, например при большом...
При переносе сайта на другую CMS возникают проблемы c миграцией дынных в БД, структура как правило разная,...
Если на сайте используется виджет комментариев VK, то со временем возникает потребность вывода количества комментариев...
В продолжении статьи о верстки рейтинга, рассмотрим PHP-скрипты системы отзывов и рейтинга в интернет-магазине.
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt