Класс для работы с БД

Тема в разделе "Работа с Базами Данных", создана пользователем vital, 24 мар 2010.

  1. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    Вобщем-то уже давно сделал для себя простой класс для работы с бд, а сейчас пришло в голову выложить его сюда. Класс - элементарен до ужаса, но такая цель у меня и стояла, что бы работать было максимально просто, без каких-либо заморочек. Он даже скорее может служить шаблоном для развития, нежели готовым решением, но мне нравится и так..
    Код (PHP):
    <?php
    class DB
    {
    private $connected=false;
    private $hwnd=null;
    var $dbhost;
    var $dbuser;
    var $dbpass;
    var $dbname;
    public function __construct ($dbhost, $dbuser, $dbpass, $dbname) //Собственно конструктор, думаю, очевидно что ему передается. Коннект с бд происходит тут же и устанавливаем флаг что мы коннектед.
    {
    $this->dbhost=$dbhost;
    $this->dbuser=$dbuser;
    $this->dbpass=$dbpass;
    $this->dbname=$dbname;
    $this->connect();
    $this->connected=true;
    }
    public function handle () //Это просто возвращает указатель на текущее соединение, если оно есть. Надо для использования функций типа mysql_error() и нек-х других, которым надо его передавать.
    {
    if ($this->connected)
    {
    return $this->hwnd;
    }
    else
    {
    return null;
    }
    }
    private function connect () //Ф-я в которой соединяемся с бд... Приват - ибо руками ее трогать не надо. см.ниже
    {
    if (!$this->connected)
    {
    $this->hwnd=mysql_connect($this->dbhost,$this->dbuser,$this->dbpass);
    mysql_select_db($this->dbname,$this->hwnd);
    mysql_query('SET NAMES `windows-1251`'); //Устанавливаетя кодировка.. Можно сделать отдельное свойство, но мне было лень и не надо абсолютно)
    $this->connected=true;
    }
    }
    public function query ($query) //Собсно основная ф-я. Передаем запрос, проверка соеденены ли с бд, если нет, то соеденяемся и выполняем запрос, возвращает рез-т.
    {
    if (!$this->connected)
    {
    $this->connect();
    $this->connected=true;
    }
    $res=mysql_query($query, $this->hwnd);
    return $res;
    }
    public function disconnect () //Ну это тоже очевидно..
    {
    if ($this->connected)
    {
    mysql_close($this->hwnd);
    }
    }
    }
    ?>
    Собственно, вот и все. Вся работа сводится к
    Код (Text):
    $db=new DB($dbhost, $dbuser, $dbpass, $dbname);
    $sql=$db->query('SELECT * FROM table');
    Ну и дальше все как всегда, mysql_fetch_array() и иже с ними..
     
  2. Dimka Inc

    Dimka Inc Гость

    Пара вопросов:
    1. Зачем в методе query($query) присутствует присвоение: $this->connected=true;
    Создаётся впечатление, что независимо от того, произошло соединение или нет, устанавливаем признак, что соединение установлено.
    2. Если описан метод handle(), возвращающий в зависимости от состояния соединения или хэндл соединения, или null, игнорировать его и везде использовать сам хэндл? Ведь тогда, если соединение разорвали, мы будем обращаться к хэндлу несуществующего соединения.

    ------
    Всех благ! :)
     
  3. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    Соединение устанавливается там же, строчкой выше. Нету ифа на удачность.. Ну может и стоило, но как-то в голову тогда не пришло) Я был уверен, что не ошибусь в параметрах. Там везде где коннект() нету этого ифа.
    В этом правы, это я исправил.. Потом.. Буду дома поправлю.
     
  4. Alien193

    Alien193 Гость

    Как-то не добавляет удобства, с таким же успехом я могу написать
    Код (PHP):
    $db=mysql_connect($dbhost, $dbuser, $dbpass);
    mysql_select_db($dbname,$db);
    $sql=mysql_query('SELECT * FROM table');
    для чего собственно и созданы эти функции.
    Особого удобства класс не добавляет, да и защиты нет.
    вот это удивило :) обычно имя hwnd используется в языках программирования использующих пользовательский интерфейс. Дословно hwnd расшифровывается Handle Window, т.е. указатель на окно (форму). Не знаю к чему оно здесь использовалось, конечно это не принципиально ;)
     
Загрузка...

Поделиться этой страницей