Author |
Message |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Nov 10, 2005 4:42 pm (написано за 22 секунды)
Post subject: 6_DbSimple: лаконичная работа с различными СУБД
|
|
dklab.ru/lib/DbSimple/
(Статья пока еще недописана, в процессе. Однако библиотека готова.)
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Nov 10, 2005 4:47 pm (спустя 4 минуты; написано за 11 секунд)
Post subject:
|
|
Предыдущие обсуждения: Проектирование простейшего (!) модуля для абстракции от SQL-сервера. (forum.dklab.ru/sql/php/ProektirovanieProsteyshegoModulyaDlyaAbstraktsiiOtSql-servera.html)
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Fri Nov 11, 2005 10:16 pm (спустя 1 день 5 часов 28 минут; написано за 1 минуту 22 секунды)
Post subject:
|
|
В архиве нерабочая библиотека. Ошибка в 48 строчке кода:Если убрать str_replace('_', '/', $class) то вроде все заработает.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Fri Nov 11, 2005 10:18 pm (спустя 2 минуты; написано за 1 минуту 25 секунд)
Post subject:
|
|
Возможно ли выполнять запросы не использую транзакции, тоесть не создавая новый обьект транзакций? Наверно надо создать одну транзакцию, и использовать ее, а когда действительно нужны транзакции создавать дополнительно. Такая идея?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sat Nov 12, 2005 1:32 am (спустя 3 часа 14 минут; написано за 2 минуты 52 секунды)
Post subject:
|
|
Иван Шумков wrote: |
В архиве нерабочая библиотека. | Ой, да неправда. Все там рабочее. Просто надо include_path прописывать, как надо, а не как попало. Смотрите примеры лучше. Иван Шумков wrote: |
Наверно надо создать одну транзакцию, и использовать ее, а когда действительно нужны транзакции создавать дополнительно. Такая идея? | Идея ужасная. Какие параметры транзкции использовать? В FireBird, по крайней мере, это ОЧЕНЬ важно. Например, у меня сейчас в начале работы создается транзакция только для чтения IBASE_READ | IBASE_COMMITTED | IBASE_REC_VERSION, минимально нагружающая базу, а при записи (которая встречается значительно реже) - создаются и тут же коммитятся транзакции IBASE_WRITE | IBASE_COMMITTED | IBASE_WAIT | IBASE_REC_NO_VERSION. Но, естественно, такой набор не обязательно единственный, на чтение может понадобиться открыть и транзакцию другого вида.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Sat Nov 12, 2005 2:19 am (спустя 46 минут; написано за 4 минуты 3 секунды)
Post subject:
|
|
Дмитрий Котеров wrote: |
Ой, да неправда. Все там рабочее. Просто надо include_path прописывать, как надо, а не как попало. Смотрите примеры лучше. | Вы правы, простите, потерял config.php. Дмитрий Котеров wrote: |
Идея ужасная. | А в случае MySQL? У меня например при интерации скрипт делает несколько запросов рабочих (лоигн, записывается дата логина, получается инфа в каких группах состоит юзер и т.п.). Мне для этого создавать отдельную транзакцию? И есть сами хэндлеры например страница новостей. Пару запросов на чтение и пару запросов на запись статистика. Как тут с транзакциями? Я понимаю когда я данные добавляю, там можно их использовать, чтобы, если, что - откатить.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sat Nov 12, 2005 1:14 pm (спустя 10 часов 54 минуты; написано за 43 секунды)
Post subject:
|
|
Вы примеры смотрели? Там создается в connect.php объект $DATABASE (база данных) и $DB (транзакция). Вот и используйте $DB везде, где хотите.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Sun Nov 13, 2005 8:09 pm (спустя 1 день 6 часов 55 минут; написано за 1 минуту 9 секунд)
Post subject:
|
|
Странно не удается установить логгер. Code (php): | скопировать код в буфер обмена | <?php /*
Класс обеспечивает совместимость DBAL и DbSimple
*/ class DbSimpleWrapper { var $rh; // обьект RequestHandler var $database; // обьект DbSimple
var $simple; // транзакция по умолчанию
function DbSimpleWrapper(&$rh) { $this->rh =& $rh;
// подключаем библиотеку $this->rh->UseLib('DbSimple', 'DSN'); $this->database = DbSimple_DSN::connect(array (www.php.net/array)( 'phptype' => $rh->db_al, 'username' => $rh->db_user, 'password' => $rh->db_password, 'hostspec' => $rh->db_host, 'database' => $rh->db_name, ) );
// указываем обработчик ошибок $this->database->set_error_handler(array (www.php.net/array)(&$this, 'ErrorHandler'));
// указываем логгер $this->database->setLogger(array (www.php.net/array)(&$this, 'Logger'));
// создаем умолчательную транзакцию $this->simple = $this->database->transaction(); }
// обертка для вывода ошибки function ErrorHandler($message, $info) { if (!error_reporting (www.php.net/error_reporting)()) return;
$this->rh->debug->Error_R($info); }
function Logger($args) { die (www.php.net/die)($args); }
function Quote($value) { return $this->simple->database->escape($value); } } | При любом запросе логер не срабатывает :(.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 12:36 am (спустя 4 часа 27 минут; написано за 40 секунд)
Post subject:
|
|
Хм. Чудеса. Теперь работает.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 1:42 am (спустя 1 час 6 минут; написано за 1 минуту 25 секунд)
Post subject:
|
|
Было бы здорово добавить что-то вроде ARRAY_VALUE. Например: нужен масив где ключ это id, а значение название: Code (php): | скопировать код в буфер обмена | $sectionsSql = $db->simple->Select('SELECT `id` AS ARRAY_KEY, `title` AS ARRAY_VALUE FROM `structure` WHERE `deleted` = 0 AND `disabled` = 0 ORDER BY `order`'); |
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 2:33 am (спустя 50 минут; написано за 1 минуту 17 секунд)
Post subject:
|
|
Как получить просто от запроса ресурс а не уже собранный масив данных из этого ресурса?
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 2:34 am (спустя 1 минуту 7 секунд; написано за 1 минуту 4 секунды)
Post subject:
|
|
Не нашел возможности получения последнего id в таблице, или вы решили что это лишний функционал? Помойму очень полезный.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Mon Nov 14, 2005 9:27 am (спустя 6 часов 53 минуты; написано за 1 минуту 42 секунды)
Post subject:
|
|
Иван Шумков wrote: |
Было бы здорово добавить что-то вроде ARRAY_VALUE. Например: нужен масив где ключ это id, а значение название: |
Иван Шумков wrote: |
Как получить просто от запроса ресурс а не уже собранный масив данных из этого ресурса? | Никак, это и не нужно в скриптах. Данный слой абстракции попросту исключен. Иван Шумков wrote: |
Не нашел возможности получения последнего id в таблице | $id = $DB->query('INSERT ...'); # это будет вставленный ID
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 1:32 pm (спустя 4 часа 4 минуты; написано за 38 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
$id = $DB->query('INSERT ...'); # это будет вставленный ID | А помимо? Не вставляя запись?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Mon Nov 14, 2005 1:41 pm (спустя 8 минут; написано за 1 минуту 2 секунды)
Post subject:
|
|
Не вставляя запись, получить "последний id" невозможно. Вы неправильно понимаете, что это такое - это не "последний id", а "id, использованный последней операцией insert". Читайте документацию MySQL.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 6:31 pm (спустя 4 часа 49 минут; написано за 47 секунд)
Post subject:
|
|
SELECT max(id) + 1 FROM table != следующий автоинкремент?
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268 поощрить/наказать
Location: Питер
|
Posted: Mon Nov 14, 2005 6:40 pm (спустя 9 минут; написано за 1 минуту 1 секунду)
Post subject:
|
|
Иван Шумков
Следующий - да. Но неизвестно, кто будет следующим.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Nov 14, 2005 8:13 pm (спустя 1 час 33 минуты; написано за 41 секунду)
Post subject:
|
|
WingedFox wrote: |
Следующий - да. Но неизвестно, кто будет следующим. | Не совсем вас понял.
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268 поощрить/наказать
Location: Питер
|
Posted: Mon Nov 14, 2005 8:35 pm (спустя 22 минуты; написано за 1 минуту 14 секунд)
Post subject:
|
|
Иван Шумков
Всё просто. Вы получили последний ID, а в следующий момент другой скрипт добавил запись. Всё. Ваш ID неверен.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Wed Nov 16, 2005 6:23 pm (спустя 1 день 21 час 47 минут; написано за 3 минуты 37 секунд)
Post subject:
|
|
Code (php): | скопировать код в буфер обмена | $this->rh->db->simple->Query('UPDATE `table` SET ?a', array (www.php.net/array)('left' => 1, 'right' => 2)); | Получаем SQL:И ошибку, что left - зарезервированное слово. Имена полей предлагаю обертывать в одиночные кавычки (`left`), тогда можно избежать много проблем.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Nov 17, 2005 3:12 am (спустя 8 часов 49 минут; написано за 51 секунду)
Post subject:
|
|
Это в MySQL - кавычки одиночные. А в Ibase, например, для этого применяются двойные: ["]. TODO: сделать второй параметр в escape(): если true, обертывает идентификатор.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Thu Nov 17, 2005 2:21 pm (спустя 11 часов 8 минут; написано за 18 секунд)
Post subject:
|
|
Дмитрий Котеров
Но как передать этот параметр в select ?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Nov 17, 2005 5:04 pm (спустя 2 часа 43 минуты; написано за 50 секунд)
Post subject:
|
|
Никак не передать. В случае вставки ассоциативных массивов все идентификаторы будут в любом случае обрамляться в ``. Да, читабельность снизится, но зато - универсально.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Wed Nov 23, 2005 6:58 pm (спустя 6 дней 1 час 54 минуты; написано за 21 секунду)
Post subject:
|
|
Дмитрий Котеров
Когда думаете дописать статью? Очень жду продолжения.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Dec 07, 2005 12:16 pm (спустя 13 дней 17 часов 18 минут; написано за 2 минуты 22 секунды)
Post subject:
|
|
version 1.23: * Расширен измеритель времени запроса: теперь это выглядит как ВремяВсего = ВремяЗапроса+ВремяПолученияПервойСтроки+ВремяПолученияОстальныхСтрок. * Унифицирован интерфейс драйверов работы с BLOB-ами (в драйверах добавился виртуальный метод _getBlobFieldNames()). API библиотеки не изменился. Вероятно, в ближайшее время будет драйвер для работы с pgSQL.
|
|
Back to top |
|
 |
zarusjamer
Guest
Карма: 388 поощрить/наказать
|
Posted: Thu Dec 08, 2005 11:50 am (спустя 23 часа 33 минуты; написано за 8 минут 9 секунд)
Post subject: Обертка имен
|
|
Я для своих таблиц в БД использую предпопределенные константы и соответственно, вставляю их в текст запросабыло бы очень удобно, если бы подобно плейсхолдерам для переменных, были сделаны плейсхолдеры для имен таблиц с другим символом и обязательной оберткой (`` для MySQL, [] для MsSQL и т.д. Code (any language): | скопировать код в буфер обмена | $DB->query("SELECT * FROM ?B? ....",BASENAME1,...); => $DB->query("SELECT * FROM `<basename1>` ...."); | Это повысить степень абстракции, так как в разных СУБД обертка таблиц и идентификаторов полей выглядит по-разному И Quote: |
TODO: сделать второй параметр в escape(): если true, обертывает идентификатор. | было бы очень здорово, но лучше не делать тру/фолс, а просто для каждого типа СУДБ обертывать все поля в "родные" обертки. Например, поле в MySQL ID в запросе воспримется нормально, а в MsSQL вызовет ошибку исполнения, так как это директива.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Dec 08, 2005 1:39 pm (спустя 1 час 48 минут; написано за 6 минут 12 секунд)
Post subject:
|
|
zarusjamer wrote: |
$DB->query("SELECT * FROM ?B? ....",BASENAME1,...); => $DB->query("SELECT * FROM `<basename1>` ....") | На крайний случай можно сделать что-то типа Code (php): | скопировать код в буфер обмена | define (www.php.net/define)("BASENAME", "user"); $DB->setIdentPrefix("phpbb_"); $DB->query("SELECT * FROM ?#BASENAME ...."); # -> "SELECT * FROM `phpbb_user` ..." | Или даже(так будет на 1 символ короче, но возможен конфликт с ?a, ?d, ?f и др. placeholder-ами, если кто-то вздумает называть константы a, d и f). Но вообще, мне кажется, Вы зря храните имена таблиц в константах. В самом деле, Вы же не храните имена переменных программы и функций в константах: Code (php): | скопировать код в буфер обмена | define (www.php.net/define)("MY_FUNC", "something"); call_user_func (www.php.net/call_user_func)(MY_FUNC, ...); # | Соответственно, если понять необходимость использования префиксов я еще могу, то вставки имени таблицы как единого целого - вряд ли (мне кажется, это излишество; я сами никогда не применяю). Ну а для вставки префикса можно сделать как-то так: Code (php): | скопировать код в буфер обмена | $DB->setIdentPrefix("phpbb_"); $DB->query("SELECT * FROM ?_user ...."); # (placeholder '?_', соответственно) # -> "SELECT * FROM `phpbb_user` ..." |
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Fri Dec 09, 2005 2:48 pm (спустя 1 день 1 час 8 минут)
Post subject:
|
|
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sat Dec 10, 2005 4:39 pm (спустя 1 день 1 час 51 минуту)
Post subject:
|
|
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Mon Dec 12, 2005 11:17 am (спустя 1 день 18 часов 38 минут; написано за 3 минуты 24 секунды)
Post subject:
|
|
Дим, когда допишешь статью? есть несколько вопросов, но пока их придержу. Единственно что: Code (php): | скопировать код в буфер обмена | function _transform2hash($rows, $ak) { $result = array (www.php.net/array)(); foreach ($rows as $row) { $k = $row[$ak]; unset (www.php.net/unset)($row[$ak]); $result[$k] = $row; } return $result; } | насколько оправдана такая конструкция? В моей практике ни разу не было необходимости в unset($row[$ak]); В двух-мерных массивах все равно в 99% случаях обращение идет по ассоциативному ключу. Может все-таки Code (php): | скопировать код в буфер обмена | function _transform2hash($rows, $ak) { foreach ($rows as $row) {$result[$row[$ak]] = $row;} return $result; } |
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Dec 12, 2005 4:34 pm (спустя 5 часов 16 минут; написано за 32 секунды)
Post subject:
|
|
Quote: |
Дим, когда допишешь статью? | Действительно: ждем недождемся!
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Tue Dec 13, 2005 12:41 pm (спустя 20 часов 7 минут; написано за 1 минуту 32 секунды)
Post subject:
|
|
Гость wrote: |
насколько оправдана такая конструкция? | Я просто старался сделать так, чтобы не было лишнего мусора, а выборка в любом случае не содержала "зарезервированных" слов ARRAY_KEY и PARENT_KEY. Думаю, из соображения эстетики это оправдано. Хотите получить ARRAY_KEY-поле явно - так и пишите:
|
|
Back to top |
|
 |
Лобач Олег
Участник форума

Joined: 05 May 2003
Posts: 72
Карма: 6 поощрить/наказать
Location: Новокузнецк
|
Posted: Wed Dec 14, 2005 8:13 am (спустя 19 часов 32 минуты; написано за 5 минут 52 секунды)
Post subject:
|
|
Обнаружил баг в функции _performTotal для MySQL. При попытке выполнить selectPage скрипт валится из-за ошибки в SQL - инвалидный запрос при определении количества записей. Для исправления бага заменить:на:Что логично, если посмотреть на шаблон парой строчек выше. Дмитрий, видимо Вы скопировали эту функцию из IB, но забыли поставить нужный индекс элемента.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Dec 14, 2005 3:54 pm (спустя 7 часов 40 минут; написано за 4 секунды)
Post subject:
|
|
Спасибо, исправил.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Fri Dec 16, 2005 4:16 pm (спустя 2 дня 22 минуты; написано за 3 минуты 6 секунд)
Post subject:
|
|
version 1.30 - Добавился новый тип placeholder-а: ?#. Пример: Code (php): | скопировать код в буфер обмена | $field = 'someField'; $DB->query("UPDATE tbl SET ?#=10", $field); # -> UPDATE tbl SET `someField`=10 - для MySQL # -> UPDATE tbl SET "someField"=10 - для FireBird
$table = 'someTable'; $DB->query("UPDATE ?# SET a=10", $table # -> UPDATE `someTable` SET a=10 - для MySQL | - Добавился параметр $isIdent в escape(): если true, она квотит строку как идентификатор.
|
|
Back to top |
|
 |
Mich
Участник форума
Warnings: 1
Joined: 15 Jun 2005
Posts: 197
Карма: -3 поощрить/наказать
|
Posted: Sun Dec 25, 2005 8:23 pm (спустя 9 дней 4 часа 6 минут; написано за 7 минут 30 секунд)
Post subject:
|
|
Дмитрий Котеров
У вас, по-видимому, опечатка-недосмотр: Code (php): | скопировать код в буфер обмена | class DbSimple_Mysql_Blob extends DbSimple_Abstract_Database_Blob { // MySQL does not support separate BLOB fetching. var $blobdata = null; var $curSeek = 0;
function DbSimple_Ibase_Blob(&$database, $blobdata=null) { | Конструктор забыли переименовать... Я тут пытаюсь понять, как вы сделали транзакции... Тема для меня абсолютно новая, поэтому требую снисхождения ;) В MySQL таблицы типа MyIsam транзакции не поддерживают (commit, rollback). Что делает в этом случае библиотека? Эксперимент ничего не говорит.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sun Dec 25, 2005 9:29 pm (спустя 1 час 6 минут; написано за 1 минуту 28 секунд)
Post subject:
|
|
Mich wrote: |
Конструктор забыли переименовать... | Да, так и есть, спасибо. Новая версия - 1.31. Mich wrote: |
В MySQL таблицы типа MyIsam транзакции не поддерживают | Соответственно, транзакции и не будут работать, чудес не бывает. Правда, ошибки тоже, скорее всего, выдаваться не будет. Команды просто проигнорируются. Так уж устроен MySQL.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Thu Dec 29, 2005 5:37 pm (спустя 3 дня 20 часов 8 минут; написано за 38 секунд)
Post subject:
|
|
version 1.32 - исправлен баг с $DB->database->blob(): в блобах не сохранялся линк на объект - базу данных.
|
|
Back to top |
|
 |
aross
Участник форума

Joined: 14 May 2005
Posts: 48
Карма: 3 поощрить/наказать
Location: Вологда
|
Posted: Thu Jan 12, 2006 10:52 am (спустя 13 дней 17 часов 14 минут; написано за 1 минуту 26 секунд)
Post subject:
|
|
Абстрагирование от параметров подключения к СУБД: подключение к СУБД использует единообразную строку коннекта (DSN — Data Source Name): connech("mysql://login:password@database?options"). Наверно, опечатка connect
|
|
Back to top |
|
 |
Albatros2001
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed Jan 18, 2006 4:09 pm (спустя 6 дней 5 часов 17 минут; написано за 21 минуту 18 секунд)
Post subject:
|
|
Иван Шумков wrote: |
Котеров Иван Шумков wrote: |
Как получить просто от запроса ресурс а не уже собранный масив данных из этого ресурса? | Никак, это и не нужно в скриптах. Данный слой абстракции попросту исключен. | Дмитрий, если я правильно понял, получить сырой result нельзя? А как быть, если необходимо в полученном массиве выполнять поиск и получение ключа по value? К примеру, необходмимо получить из базы данных все названия рубрик каталога, их id и поле parent, опрелеляющее вложенность их друг друга и поле hide, определяющее публикуется эта рубрика или скрыта. Затем в решаемой задаче возникает ситуация, когда необходимо в одном месте скрипта узнать все id скрытых рубрик, а в другом месте получить все id с одним значением parent (всех детей рубрики)? Оптимальный вариант решения - запросить сырой result из базы данных и самостоятельно его разобрать, сформировав на выходе два одномерных массива id=>name и id=>parent и работать с ними. При работе же с библиотекой мы получаем или двухмерный массив с ключом по id (и мучаемся с перереборкой всех его элементов) или же выполяем два запроса: один для формирования одного двухмерного массива, второй - для второго. А если нужных полей, будет не два, а больше? Делаем для каждого из них отдельные запросы? Может быть есть какое-нибудь грамотное решение, а я просто неправильно решаю поставленные задачи? Еще, Дмитрий. Для получения результата в виде значения одной ячекйи мы запрашиваем одну функцию, для получения столбца - вторую, для получения двух столбцов третью, для двухмерного массива - четвертую. Дополнительно еще одна функция преобразования массива. Разве нельзя вызывать одну единственную функцию, в параметрах которых указать что мы хотим получить: value - значение ячейки row - одномерный массив строки таблицы (как вариант с выбором ассоциированный массив на выходе или числовой) col - одномерный массив столбца таблицы 2col - одномерный массив двух столбцов с ключом по первому array - двухмерный массив key_array - тоже, но с ключом по id Интерфейс запросов тогда будет единым. Возможно я что-то снова не понял и это не будет удобнее? Тогда прошу меня извинить, объясните, пожалуйста.
|
|
Back to top |
|
 |
|