[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ООП (БД)
Stasonix
Реально ли сделать (полями/методами) класса названия таблиц в базе данных, к которой подключился?



Я пользуюсь PDO, не знаю чем это может помочь в данной ситуации, но все же. В общем реально ли сделать такое:

Имена таблиц подключенной базы данных должны стать (полями/методами), и иметь свои методы (поля).

Напр. (допустим мы подключились к бд test и в ней есть таблица Users)

$m = new MDB();

$m->Users()->GetRec($a);






Спустя 8 часов, 6 минут, 2 секунды (18.08.2012 - 16:13) I++ написал(а):
Вообще есть вот такое: http://www.php.net/manual/ru/mysqli-result.fetch-object.php

Но производительность в данном случае почти в 3 раза ниже, чем при использовании классического подхода.

Есть еще вот такая хрень: http://www.php.net/manual/ru/mysqli-stmt.prepare.php

Я лично её терпеть не могу, но она иногда используется.

Спустя 2 часа, 31 минута, 5 секунд (18.08.2012 - 18:44) Stasonix написал(а):
Я вот так сделал:

class MDB extends DB {

// current table
protected $tbl = "";

function __construct(){

parent::__construct();

}


public function __call( $method, $param )
{

$tables = array();

if ($result = $this->pdo->query("SHOW TABLES"))
{

while ($row = $result->fetch(PDO::FETCH_NUM))
{

$tables[] = $row[0];

}

}


if (in_array($method,$tables))
{

$this->tbl = $method;

return $this;

}
else
{

return FALSE;

}

}



Но говорят что очень расточительно ибо же кэшировать надо, а вот как это сделать что-то я теряюсь в догадках.

Спустя 12 минут, 21 секунда (18.08.2012 - 18:57) Guest написал(а):
Вообще то это называется шлюзами и они отображают реляционную структуру таблицы в объектную, так как mysql не объектная БД.
http://martinfowler.com/eaaCatalog/tableDataGateway.html
http://martinfowler.com/eaaCatalog/rowDataGateway.html
http://www.longacre-scm.com/blog/index.php...le-data-gateway

Спустя 9 минут, 33 секунды (18.08.2012 - 19:06) Guest написал(а):
Цитата
Вообще есть вот такое: http://www.php.net/manual/ru/mysqli-result.fetch-object.php

Но производительность в данном случае почти в 3 раза ниже, чем при использовании классического подхода.
Цитата
Замечание: Производительность
    В плане скорости эта функция аналогична mysql_fetch_array() и почти также быстра, как mysql_fetch_row() (разница незначительна).

Замечание:
    mysql_fetch_object() работает аналогично mysql_fetch_array(), с единственным отличием - функция возвращает объект вместо массива. Это, кроме всего прочего, означает, что вы сможете работать с полями только по имени колонок, а не индексов (числа не могут быть свойствами объекта).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.