Примеры использования PDO MySQL
Ниже приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и удаление данных.
Для примеров используется таблица `category` с полями `id`, `name` и `parent`.
Подключение к серверу MySQL
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
Четвертым параметром конструктора PDO можно указать параметры подключения, например SQL запрос который будет выполнен сразу после подключения:
$dbh = new PDO(' mysql:dbname=db_name;host=localhost', 'логин', 'пароль', );
Чтобы отследить ошибку подключения к БД используется исключение:
try { $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); } catch (PDOException $e) { }
SQLSTATE[HY000] [1045] Access denied for user 'логин'@'localhost' (using password: YES)
Выборка из БД
PDO позволяет использовать в запросах псевдопеременные чтобы исключить SQL инъекции. В самом запросе в место данных указывается ? или :id, а в методе execute() указываются реальные значения этих переменных.
$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = ?"); $array = $sth->fetch(PDO::FETCH_ASSOC);
или
$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = :id"); $array = $sth->fetch(PDO::FETCH_ASSOC);
( [id] => 21 [parent] => 3 [name] => Хурма )
Данный пример получает всю таблицу в виде ассоциативного массива:
$sth = $dbh->prepare("SELECT * FROM `category` ORDER BY `name`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_ASSOC);
( [id] => 16 [parent] => 3 [name] => Абрикос ) [id] => 28 [parent] => 3 [name] => Авокадо ) ... )
Получить значение поля одной записи
$sth = $dbh->prepare("SELECT `name` FROM `category` WHERE `id` = ?"); $value = $sth->fetch(PDO::FETCH_COLUMN); echo $value; // Выведет "Хурма"
Пример получает все значения поля `name` из таблицы `category`.
$sth = $dbh->prepare("SELECT `name` FROM `category`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_COLUMN);
( [0] => Мороженое [1] => Овощи [2] => Фрукты [3] => Ягоды [4] => Грибы [5] => Морепродукты [6] => Смеси ... )
Получение структуры таблицы
$sth = $dbh->prepare("SHOW COLUMNS FROM `category`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_ASSOC);
( ( [Field] => id [Type] => int(10) unsigned [Null] => NO [Default] => [Extra] => auto_increment ) ( [Field] => parent [Type] => int(11) unsigned [Null] => NO [Default] => 0 [Extra] => ) ( [Field] => name [Type] => varchar(255) [Null] => NO [Default] => [Extra] => ) )
Добавление записей в БД
$sth = $dbh->prepare("INSERT INTO `category` SET `parent` = :parent, `name` = :name"); // Получаем id вставленной записи $insert_id = $dbh->lastInsertId();
Изменение записей
$sth = $dbh->prepare("UPDATE `category` SET `name` = :name WHERE `id` = :id");
Удаление из БД
echo 'Удалено ' . $count . ' строк.';
Или метод c псевдопеременными:
$sth = $dbh->prepare("DELETE FROM `category` WHERE `parent` = :parent");
Обработка ошибок
// Таблицы `category_new` нет в БД. $sth = $dbh->prepare("INSERT INTO `category_new` SET `parent` = :parent, `name` = :name"); $info = $sth->errorInfo();
( [0] => 42S02 [1] => 1146 [2] => Table 'database.category_new' doesn't exist )