При разработке крупных 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





Уроки по PHP
JavaScript
Уроки по HTML
Дизайнерам
СЕОшникам
Разное


Комментарии
Заполните все поля
Написать комментарий