При разработке крупных web-проектов, создании интернет-магазинов, или обычных сайтов, у любого программиста возникает необходимость в абстракции базы данных..
Для абстракции базы данных в PHP5 включена поддержка библиотеки PDO. PHP PDO работает очень быстро, и защищает сайт от самой распространенной атаки - "SQL-инъекция".
Рассмотрим класс для работы с меню на сайте. Класс должен читать/добавлять/изменять/удалять разделы меню на сайте.
Для начала создадим базу данных:
CREATE DATABASE `ox2.ru`
Теперь наполним ее таблицей:
CREATE TABLE `ox2.ru`.`category` ( `id` INT( 11 ) NULL AUTO_INCREMENT PRIMARY KEY , `created` DATETIME NULL DEFAULT NULL , `name` VARCHAR( 255 ) NOT NULL , `language_id` INT( 11 ) NOT NULL DEFAULT '1', INDEX ( `language_id` ) ) ENGINE = MYISAM ;'}
PHP-код с подробным описанием:
<?php class Category { private $_db = null; public function __construct(PDO $db) { $this->_db = $db; } /** * Добавление нового раздела меню * @param <string> $name - название раздела меню * @param <integer> $language_id - язык разделов меню (русский?) * @return <object> */ public function add($name, $language_id = 0) { $query = $this->_db->prepare("INSERT INTO category (`created`,`name`, `language_id`) VALUES (NOW(), :name, :language_id)"); $query->bindParam(":name", $name, PDO::PARAM_STR, 255); $query->bindParam(":language_id", $language_id, PDO::PARAM_INT, 11); $query->execute(); return $this->_db->lastInsertId(); //возвращаем id-добавленной строки } /** * Редактирование меню * @param <integer> $category_id - id раздела, который необходимо редактировать * @param <string> $name - название раздела меню * @param <integer> $language_id - язык разделов меню (русский?) * @return <boolean> */ public function edit($category_id, $name, $language_id = 0) { $query = $this->_db->prepare("UPDATE category SET `name` = :name, `language_id`=:language_id WHERE id=:category_id"); $query->bindParam(":name", $name, PDO::PARAM_STR, 255); $query->bindParam(":language_id", $language_id, PDO::PARAM_INT, 11); $query->bindParam(":category_id", $category_id, PDO::PARAM_INT, 11); return $query->execute(); } /** * * @param <integer> $language_id - язык разделов меню (русский?) * @return <boolean> */ public function getCategory($language_id = 0) { $query = $this->_db->prepare("SELECT category.* FROM category WHERE language_id=:language_id"); $query->bindParam(":language_id", $language_id, PDO::PARAM_INT, 11); $query->execute(); return $query->fetchAll(PDO::FETCH_OBJ); } /** * * @param <integer> $category_id - id раздела, который необходимо удалить * @return <boolean> */ public function delCategory($category_id) { $query = $this->_db->prepare("DELETE FROM `category` WHERE `id` = :category_id"); $query->bindParam(":category_id", $category_id, PDO::PARAM_INT, 11); return $query->execute(); } } $db = new PDO("mysql:dbname=ox2.ru;host=localhost", "root", "ox2.ru"); //Соеденяемся с базой данной «ox2.ru», хост «localhost», логин «root», пароль «ox2.ru» $category = new Category($db); //Создаем объект для работы с разделами меню $category_1_id = $category->add("Новая категория 1", 1); //Добавляем новую категорию, функция возвращает id-добавленной строки $category_2_id = $category->add("Новая категория 2", 1); //Добавляем новую категорию $category_3_id = $category->add("Новая категория 3", 1); //Добавляем новую категорию if ($category->delCategory($category_2_id)) { //Удаляем категорию echo "Удалена вторая категория!!<br/>"; } if ($category->edit($category_1_id, "Старая категория", 1)) { //Редактируем категорию echo "Успешно изменено!<br/>"; } echo "<p>Меню:</p>"; foreach ($category->getCategory(1) as $category_item) { //Выводим разделы меню echo $category_item->name . "<br/>"; } ?>
Поскольку наше меню расчитано на несколько языков, мы ввели столбец language_id, если он равен 1, то язык меню русский
Теперь более подробно о работе библиотеки PDO. Для отправки запросов через PDO нужно сделать 4 основных шага:
- Соединиться с базой данных:
<?php $db = new PDO("mysql:dbname=ox2.ru;host=localhost", "root", "ox2.ru");
Здесь имя базы данных «ox2.ru», хост «localhost», логин «root», пароль «ox2.ru» - Подготовить запрос на выполнение:
<?php $query = $db->prepare("SELECT category.* FROM category WHERE language_id=:language_id");
:language_id - это переменная, которая будет установленна ниже - Подготовить входящие переменные:
<?php $query->bindParam(":language_id", $language_id, PDO::PARAM_INT, 11);
Подготовливаем переменную :language_id, устанавливаем ей тип PDO::PARAM_INT, и максимальное кол-во знаков - 11.
Чаще всего используются следующие типы:
PDO::PARAM_INT - числа
PDO::PARAM_STR - строки
PARAM_BOOL - числа от 0 до 10 - Выполнить запрос:
<?php $query->execute();
- Посмотреть нет ли ошибок:
<?php print_r($query->errorInfo());
- Вывести результат:
<?php print_r($query->fetchAll(PDO::FETCH_OBJ));
Результат будет возвращен в виде массима объектов. Можно сделать в в виде числового массива, указав для функции fetchAll параметр PDO::FETCH_NUM, или в ввиде ассотивного PDO::FETCH_ASSOC
Комментарии
Заполните все поля
Написать комментарий