Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс для работы с БД, Не хочет работать 
:(
    Опции темы
CyClon
Дата 28.11.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Код
<?php

class DB
{
    public function __construct($type, $host, $user, $password, $db)
    {
        switch ($type) {
            case 'mysql':
                return new MySQL($host, $user, $password, $db);
                break;
        }
    }
}

?>

Код
<?php

class MySQL
{
    private $host;
    private $user;
    private $password;
    private $db;
    private $cid;
    private $persistent = FALSE;
    private $errors;

    public function __construct($host, $user, $password, $db)
    {
        $this->host = $host;
        $this->user = $user;
        $this->password = $password;
        $this->db = $db;
    }

    public function connect()
    {
        if ($this->cid = ($this->persistent) ? mysql_pconnect($this->host, $this->user, $this->password) : mysql_connect($this->host, $this->user, $this->password)) {
            if (mysql_select_db($this->db, $this->cid)) {
                return TRUE;
            } else {
                $errors[] = mysql_error($this->cid);
                return FALSE;
            }
        } else {
            $errors[] = mysql_error($this->cid);
            return FALSE;
        }
    }

    public function query($query)
    {
        $query = mysql_real_escape_string($query);
        if ($result = mysql_query($query, $this->cid)) {
            return $result;
        } else {
            $errors[] = mysql_error($this->cid);
            return FALSE;
        }
    }

    public function disconnect()
    {
        if ($this->cid) {
            mysql_close($this->cid);
        }
    }

    public function __destruct()
    {
        $this->disconnect();
    }
}

?>


Проблема в строке return new MySQL($host, $user, $password, $db). Мне нужно сделать, чтобы работать можно было так:
Код
<?php

$db = new DB('mysql', 'localhost', 'root', '', 'db');
$db->connect();
$db->query('...');

?>


Но, что-то не очень получается. Подскажите как организовать.

ЗЫ: Подход к написанию класс правильный? Или может стоит подумать о других вариантах реализации?


--------------------
user posted image
PM   Вверх
SamDark
Дата 28.11.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 2
Всего: 38



А вообще писать надо?
http://dklab.ru/lib/DbSimple/


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
teroni
Дата 28.11.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 3
Всего: 22



Я бы сделал общий класс DB, в котором находились бы общие для всех типов БД свойства и методы.
А потом для каждого БД делал класс типа MySQL extends DB, PostgreSQL extends DB и т.д.
А вызывал бы
Код

<?php
$db1 = new MySQL('localhost', 'root', '', 'db');
$db1->connect();
$db1->query('...');

$db2 = new PostgreSQL('localhost', 'root', '', 'db');
$db2->connect();
$db2->query('...');
?>


Это сообщение отредактировал(а) teroni - 28.11.2007, 15:13
PM MAIL   Вверх
vasac
Дата 28.11.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 3
Всего: 36



Какой смысл использовать различные СУБД при одинаковом SQL?
PM WWW   Вверх
CyClon
Дата 28.11.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



teroni, тип базы данных нужно хранить в конфиге, соответственно это будет константа. Я могу написать: $db = new DB(DB_TYPE, DB_HOST, DB_USER, DB_PASSWORD, DB_NAME). Написать же $db = new DB_TYPE(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) я не смогу (или смогу? smile ). Получается если нужно будет перейти с MySQL на PostrageSQL или др. БД, придется лезть в код и т.п. smile Это конечно не сложно, но хотелось бы, чтобы все было по-человечески. Использовать такие вещи как PEAR DB не буду, ибо слишком громоздко.


--------------------
user posted image
PM   Вверх
CyClon
Дата 28.11.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Сделал так:

Код
<?php

$db = DB:create('mysql://root@localhost/test');
$db->connect;

?>


Вроде норм smile


--------------------
user posted image
PM   Вверх
Azalis
Дата 29.11.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.3.2006
Где: Internet

Репутация: нет
Всего: нет



Знаешь, мне очен странна вот эта функция:

Код

public function query($query)
    {
        $query = mysql_real_escape_string($query);
        if ($result = mysql_query($query, $this->cid)) {
            return $result;
        } else {
            $errors[] = mysql_error($this->cid);
            return FALSE;
        }
    }


Получается, что ты ВЕСЬ ЗАПРОС проверяешь на запрещённые символы.. тоесть получается, что когда ты передашь ей запрос типа:
Код

SELECT  * FROM `tbl_users` WHERE `id`='name'

На выходе при подаче запроса получится следующее:
Код

SELECT  * FROM \`tbl_users\` WHERE \`id\`=\'name\'


Крута, правда? ))
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.