PDO - модуль, позволяющий работать с различными базами данных, такими как MySQL от v3, PostgreSQL, SQLite от v2, ODBC, DB2, Oracle, Firebird.
Его особенность в упрощенном синтаксисе "общения" с БД и скорости работы, так как он написан на языке C, который как известно работает в несколько раз быстрее PHP модуля с использованием mysql_query(), а также быстрее других обработчиков и программ, для обращения к базам данных. Так как большинство использует MYSQL, поэтому эта статья посвящена именно этой базе...
Подключение к БД:
Новое соединение с базой данных:
try {
$bd = new PDO('mysql:host=хост;dbname=база', 'логин(или переменная)', 'пароль(или переменная)');
}
catch (Exception $e) {
echo $e->getMessage();
}
try - попытка подключения к базе (критической ошибки не будет), если подключение не прошло выведет ошибку которую выдаст база данных.
Закрытие соединения и освобождение ресурсов:
$bd = NULL;
В PDO нет команды для того, чтобы освободить буфер запроса (mysql_free_result()), для этого можно просто присваивать NULL переменной запроса:
$select = NULL;
Запросы на изменение и добавление данных exec():
$insert = $bd->exec('INSERT INTO `table` (`имя столбца`) VALUES("значение")');
Как вы можете заметить, большой разницы нет, по сравнению с mysql_query(), возвращает значение – количество затронутых рядов, или FALSE в случае ошибки.
$update = $bd->exec('UPDATE `table` SET `имя столбца`="значение"');
Экранирование символов query()
$bd->quote($_POST['var']);
Выборка данных:
$id = $bd->lastInsertId(); // последний auto_increment
$sel = $bd->query('SELECT * FROM `table`;'); // значение FALSE в случае ошибки
$res = $bd->query('SELECT * FROM `table`;');
while ($row = $res->fetch(PDO::(FETCH_BOTH или FETCH_ASSOC или FETCH_NUM или FETCH_OBJ или FETCH_LAZY))) {
...
}
FETCH_NUM - массив с ключами чисел
FETCH_ASSOC - ассоциативный массив с названием столбцов
FETCH_BOTH - числовой и ассоциативный массив
FETCH_OBJ - выборка объекта (если актуально данным выборки)
FETCH_LAZY - выборка объекта, которая подгружает данные только во время обращения к ним
$res = $var(переменная запроса)->fetchColumn(); // выборка одной записи с запроса, если актуально
$sel = 'SELECT * FROM `table`;';
$var = $bd->query($sel)->fetchAll(PDO::FETCH_ASSOC); // выборка всех данных с таблицы
Транзакции:
$bd->beginTransaction();
$bd->rollback(); // возвращает данные в исходную позицию (во время подключения) если не был вызван commit()
$bd->commit(); // именяет данные в таблице
Информация о таблице:
Вся информация о столбцах:
$tab = $bd->query($zapros);
$num = $tab->columnCount();
for ($i=0; $i < $num; $i++) {
$dat = $num->getColumnMeta($i);
}
Надеюсь эта статья помогла вам оптимизировать ваши запросы к бд на максимальную скорость обработки данных! Для пополнения этой статьи можете обратиться к её автору. Давайте сделаем PHP программирование лучше, легче и быстрее! :)