Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Правильная организация класса для работы с таблицей mysql

11K
31 июля 2008 года
NeverBC
40 / / 27.08.2006
У меня, собственно, такой вопрос. Сейчас занимаюсь написанием небольшой CMS для сайта, поставил себе целью по максимуму использовать ООП. Хочу получить правильные с логической точки зрения классы для работы с таблицами.

Для примера. Есть у меня таблица pages, которая состоит из полей id, title, и текст и нужна для вывода статических страниц на сайте. Мне нужен класс, который будет выполнять следующие функции:
-добавление записи;
-редактирование записи;
-удаление записи;
-сбор данных и вывод существующей записи.

Получилось вот что, но я думаю, что это не совсем правильно:

Код:
<?
class Page {
    var $id;
    var $title;
    var $text; 
   
    function select_page($id) {
        $id=int($id);
        $this->id=$id;
    }
   
    function init_page() {
        $query="SELECT * FROM `pages` WHERE `id`='$this->id'";
        $result=mysql_query($query);
        if(mysql_num_rows($result)==0) {
            return FALSE;
        }
        else {
            $row=mysql_fetch_array($result);
            $this->title=$row['title'];
            $this->text=$row['text'];
            return TRUE;
        }
    }
   
    function delete_page() {
        $query="DELETE FROM `pages` WHERE `id`='$this->id'";
        if(mysql_query($query)) return TRUE;
        else return FALSE;
    }
   
    function edit_page($title, $text) {
        $query="UPDATE `pages` SET title='$title', text='$text' WHERE `id`='$this->id'";
        if(mysql_query($query)) return TRUE;
        else return FALSE;
    }
   
    function add_page($title, $text) {
        $query="INSERT INTO `pages` (`title`, `text`) values ('$title', '$text')";
        if(mysql_query($query)) return TRUE;
        else return FALSE;
    }
}
?>


Дело в том, что это мой первый опыт работы с ООП и я пока не полностью себе представляю все принципы работы. По поводу того как это будет работать у меня претензий нет, а вот правильно ли это логически?

Метод select_page($id) выбирает id страницы, с которой будем работать.
Метод init_page() загружает остальные данные по уже определённому id.
Метод delete_page() удаляет загруженную страницу.
Метод edit_page() редатирует её.

Сомнения возникли, когда стал писать метод add_page. Как то нелогично выходит, определять id мы не будем. Вобщем метод работает как функция, которой могло бы и не быть в классе. Как правильно? Может быть создавать объект, задавать его данные, а потом уже делать что-то вроде add_page()? Но это ставит под вопрос остальные мои методы.

Вобщем ситуация простая, хотелось бы спросить у компетентных людей, как бы они организовали эту несложную задачу.
92
31 июля 2008 года
Тень Пса
2.2K / / 19.10.2006
а не проще ли написать класс работы с БД вообще?

по типу
 
Код:
class DataBase
{
   function select(); // запрос SELECT, функция возвращает множество результатов, массив хэшей. каждый элемент - строка в таблице.
   function selectOne(); // запрос  SELECT, функция возвращает хэш - одну строку в таблице.
   function execSQL(); // запрос UPDATE или DELETE (например), возвращает 1 или 0 (выполнен/не выполнен)
   ...
}
ну это так, на вскидку. вместо того, чтобы пользоваться mysql_* функциями каждый раз :)
11K
31 июля 2008 года
NeverBC
40 / / 27.08.2006
Можно чуть-чуть подробнее? Одну функцию целиком в упрощенном виде для примера. В каждой таблице разные поля и их особенности, как решается такая проблема? Вы совершенно правы, я собирался делать однотипные классы и для других таблиц, почти ничего в них не меняя, кроме этих самых полей.
244
31 июля 2008 года
UAS
2.0K / / 19.07.2006
Я бы сделал как у меня. У меня написан один абстрактный класс с БД. Далее есть наследники этого класса, каждый для разной БД (mysql, mssql и прочее). Абстрактный использую для того, чтоб определить какие-то общий нужный мне функционал (дамп ошибок, обработка нескольких файлов и т.д.).
Затем написан класс для работы со статьями, который и делает редактирование, правку и т.д.
В итоге прийдется попариться, чтоб написать классы. Но потом объём кода и мучений будет в итоге поменьше.

З.Ы.: и пишите сразу на пхп5) Там как раз и Exception используйте и прочее) Ну за разъяснениями - в ман=)
8
31 июля 2008 года
mfender
3.5K / / 15.06.2005
Для интересу и познания конечно полезно напейсать своё. Но тогда, сдаётся мне, спрашивать - только себе сознание портить советами.

А так - всё уже давно написано. Zend FrameWorks
11K
01 августа 2008 года
NeverBC
40 / / 27.08.2006
Мне пришла в голову некоторая идея, хочу у вас узнать имеет ли она право на жизнь. Хочу сделать класс для работы с MySQL. Методы - подключение к БД, выбор таблицы, отключение, удаление, редактирование, добавление. Для редактирования и добавления в кач-ве аргумента подавать массив пар поле-значение или 2 массива - один с полями, другой со значениями и потом основываясь на этом генерировать запрос. Также можно для удобства сделать метод, который будет готовить эти массивы для методов добавления-редактирования.

Нормально?
13
02 августа 2008 года
RussianSpy
3.0K / / 04.07.2006
Цитата: mfender
А так - всё уже давно написано. Zend FrameWorks



или как вариант php ADODB

http://adodb.sourceforge.net/

304
02 августа 2008 года
Fenyx
707 / / 26.01.2005
А вот интересно - в своих проектах вы используете класс коннекта или затачиваете под лпределенную базу (имеется ввиду большие проекты а не домашние странички и сайты с малой нагрузкой)
353
02 августа 2008 года
Nixus
840 / / 04.01.2007
Используем класс, который сам запросы генерит для простых случаев. А в сложных скармливаем тому же классу sql-запрос.
13
03 августа 2008 года
RussianSpy
3.0K / / 04.07.2006
Используем фреймворки и отдельные классы для работы с СУБД. Скармливаем им кросс-СУБД SQL-запросы. В редких случаях, когда такой не написать - приходится изворачиваться по-другому.
11K
03 августа 2008 года
NeverBC
40 / / 27.08.2006
Я решил реализовать такую вещь для своих проектов.

Абстрактный класс для работы с БД вообще, который не привязан ни к одному типу, который будет работать с классами конкретных БД. Как то так. Я понимаю, что есть готовые решения, но хочется опыта и прогресса.
92
03 августа 2008 года
Тень Пса
2.2K / / 19.10.2006
Цитата: NeverBC
Я решил реализовать такую вещь для своих проектов.

Абстрактный класс для работы с БД вообще, который не привязан ни к одному типу, который будет работать с классами конкретных БД. Как то так. Я понимаю, что есть готовые решения, но хочется опыта и прогресса.


дерзай :) опыт еще никому не помешал )))

тем более, что ты еще просто учишься )

ИМХО, готовые решения будешь использовать тогда, когда будешь знать для чего оно и как, а не просто тупо брать и юзать )

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог