Форум → Программирование → Пыхнуть хотите? → Готовые решения → goDB — библиотека работы с MySQL
goDB — библиотека работы с MySQL
Страницы: ← Предыдущая страница • Следующая страница →
-
-
21 мая 2014 г. 3:59, спустя 2 минуты 48 секунд
@vasa_c, нет гавнопхп тут места :-)
Сапожник без сапог -
-
28 октября 2014 г. 4:36, спустя 159 дней 23 часа 55 минут
При работе с либой столкнулся со следующими ситуациями:
Ситуация 1:
При выполнении запроса, когда плейсхолдеров в шаблоне запроса нет, а в $data есть некоторые данные (например, array('some_data' => 1), предполагается использование именованных плейсхолдеров), парсер ругается на различие в количестве плейсхолдеров и переданных параметров.
Т.е. если мы используем именованые плейсхолдеры и количество плейсхолдеров меньше (но >0), чем переданных данных, то все замечательно. Но если снизить количество плейсхолдеров до 0, то возникает неоднозначность. Парсер считает что мы используем неименованые плейсхолдеры и кидает эксепшен.
$db->query("SELECT * FROM users WHERE id = ?i:user_id", array('user_id' => 1)); //ok
$db->query("SELECT * FROM users", array('user_id' => 1)); //Data elements (1) more than the placeholders (0)
Возможно нужно игнорировать данные в случае отсутствия плейсхолдеров.
(Для себя решил это постоянным пробрасыванием в шаблон названия таблицы, тем самым принудительно включая определение плейсхолдеров как именованные. $db->query("SELECT * FROM ?t:table", array('table' => 'users', 'user_id' => 1));
Может стоило строже подходить к формированию данных)
Ситуация 2:
После каждого соединения с базой (postgres) мне нужно выполнить запрос:
SET search_path TO web
Конечно можно выполнять $db->query() сразу после создания объекта $db, но тогда теряется смысл lazy подключения.
Было бы здорово иметь параметр в настройках (предположим, pre_queries) или метод ($db->preQuery()), который бы отложил выполнение запроса до момента первого "настоящего" запроса к базе. -
-
28 октября 2014 г. 4:50, спустя 12 минут 54 секунды
1. Зачем вообще что-то передавать в данных, если в запрос ничего не вставляется?
2. Что это за запрос? Он какой-то особый или много разных может быть? -
28 октября 2014 г. 5:14, спустя 23 минуты 13 секунд
присоединяюсь1. Зачем вообще что-то передавать в данных, если в запрос ничего не вставляется?
банально удобноЧто это за запрос?
он же написал
SET search_path TO web
но фактически это может быть любой конфигурационный запрос, например SET NAMES … COLLATE …не всё полезно, что в swap полезло -
28 октября 2014 г. 5:14, спустя 43 секунды
1. Так получилось что запрос генерируется динамически в зависимости от входных параметров. Возникает ситуация когда плейсхолдеров нет, а в $params что-то находится.
Пример, у меня есть метод выборки сообщений по параметрамfunction getMessages($params = array())
туда передаюarray(
'topic' => 1,
'date' => 564564,
'admin' => true
);
если topic и date в запросе будут выглядеть как topic = ?i:topic , date > ?i:date,
то admin будет интерпретирован как `user_id` IN (SELECT `id` FROM {users} WHERE `admin` = 1)
и этот же массив $params кидаю в query
Вот в случае когда я хочу выбрать любые сообщения админов без других параметров array('admin' => true), то оказывается что плейсхолдеров нет.
Тут наверно нужно очищать от левых параметров, да.
2. Пока нужен именно SET search_path TO web, он указывает в каких схемах по умолчанию искать таблицы (из той же серии, что SET NAMES в mysql) -
28 октября 2014 г. 5:19, спустя 4 минуты 12 секунд
@KevinB, чтобы получателю приходило уведомление нужно делать вот так:
@KevinBне всё полезно, что в swap полезло -
28 октября 2014 г. 5:23, спустя 4 минуты 2 секунды
@KevinB, чтобы получателю приходило уведомление нужно делать вот так:
@KevinB
Благодарю
@vasa_c, -
29 октября 2014 г. 4:39, спустя 23 часа 16 минут 50 секунд
1. Без плейсхолдеров не использовать данные - не вариант. Бывает плейсхолдер поставить забываю - нужно ошибку выкидывать.
Какие-нибудь другие варианты можете предложить?
Вообще, имхо, если шаблон меняете, то должны знать, нужны данные или нет.
Может это поможет в некоторых случаях: https://github.com/vasa-c/go-db/wiki/Table
2. Я в Pg не силён, для него другой чел адаптер делал, если на гитхабе тикет создать, может он придумает что.
С SET NAMES в mysql было решено через конфиг: https://github.com/vasa-c/go-db/wiki/Adapters_mysql
Но, в принципе и предварительные запросы тоже можно сделать.Спустя 278 сек.
@KevinB :) -
29 октября 2014 г. 5:43, спустя 1 час 3 минуты 24 секунды
@vasa_c,
1. Не критично, можно данные проверять. Предлагаю закрыть вопрос.
Table не подошли, во-первых быстрее самому написать запрос, во-вторых условие немного сложнее, чем просто что-то равное чему-то (больше, меньше, содержится в, равно полю из другой таблицы и тп).
2. Ленивые конфигурационные запросы были бы кстати. Сегодня это set names, завтра установка часового пояса, послезавтра захочется логировать сам факт соединения и тп.
Почему бы не дать разработчику такую возможность. -
29 октября 2014 г. 5:52, спустя 9 минут 14 секунд
2. Ленивые конфигурационные запросы были бы кстати. Сегодня это set names, завтра установка часового пояса, послезавтра захочется логировать сам факт соединения и тп.
Почему бы не дать разработчику такую возможность.
@KevinB, ИМХО, это выходит за рамки тех задач, которые решает GODB или любой другой аналогичный адаптор. Никто не мешает написать над GODB свой инициализирующий слой, если он нужен. -
1 ноября 2014 г. 2:20, спустя 2 дня 20 часов 27 минут
@KevinB,
1. Сделал.
Если в данных есть 0-й индекс, значит порядковые - ошибка.
Нет, значит именованные. -
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!