26.02.2010, 14:22
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от e1f
|
запросы будут формироватся пользователем вашей CMS
|
Да. Будет стандартный синтаксис (шаблоны написания запросов), все остальное - функции не реазлизованные на той или инной БД берет на себя модуль. Например SELECT INTO не везде одиноков, но по стандарту он таков: "SELECT ... INTO ... FROM ......"
Сообщение от e1f
|
Как будет реализован квотинг данных?
|
А вот над этим я думаю, пытаюсь вообще все на автомат поставить. Потому как задолбало постоянно писать типа
$db->q("SELECT * FROM ... WHERE ...='".sql_escape($data)."'"
Может есть идеи как избавиться от функции ?
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
26.02.2010, 14:26
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от PeaceCoder
|
Может есть идеи как избавиться от функции ?
|
От sql_escape?
|
|
26.02.2010, 15:05
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
bind_param
|
|
26.02.2010, 16:00
|
|
Профессор
|
|
Регистрация: 05.06.2009
Сообщений: 1,703
|
|
Цитата:
|
Да. Будет стандартный синтаксис
|
Т.е. запрос будет в виде строки а потом будет парсится регулярками и приводиться к нужному виду?
Сообщение от e1f
|
Если делать грамотный Storage-wrapper, то от запросов везде, кроме как в классах, реализующих функционал для каждого типа БД, надо бежать как от огня.
|
Человек дело говорит! PeaceCoder зря вы мой призыв обратить внимание на Zend не услышали. Посмотрите как там сделано:
$params = array(
'host' => 'localhost',
'username' => 'root',
'password' => '',
'dbname' => 'drupal'
);
// Инициализация адаптера с указанием нужного диалекта
$db = Zend_Db::factory('Pdo_Mysql', $params);
// Выполнение запроса
$result = $db->fetchAll(
$db -> select()
-> from('users')
-> order('uid')
-> limit(15)
);
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
|
|
26.02.2010, 16:14
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Kolyaj
|
От sql_escape?
|
Идейка понравилась, думал что-то в этом роде но не думал что это будет удобно...
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
26.02.2010, 17:52
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Tim
|
зря вы мой призыв обратить внимание на Zend не услышали
|
услышал. пока размышляю что будет лучше. то как построены зенд запросы и хорошо и плохо. хорошо - мы в нутри класса имеем четкую структуру запроса, плохо такое формирование уменьшает кпд программиста, т.к. постоянно повторятся array(name=>adwd,...) утомляет
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
26.02.2010, 18:34
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Tim
|
Посмотрите как там сделано
|
А вот кста, я так и не понял как сформировать запрос с сабзапросом?
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
27.02.2010, 00:41
|
|
Профессор
|
|
Регистрация: 05.06.2009
Сообщений: 1,703
|
|
Цитата:
|
А вот кста, я так и не понял как сформировать запрос с сабзапросом?
|
// Запрос номер 1 (вложенный)
$query1 = $db -> select()
-> from('blocks', 'delta')
-> where('bid = 2');
// Запрос номер 2
$query2 = $db -> select()
-> from('users')
-> where('uid = ?' , $query1)
-> limit(2);
// Посмотрим как выглядит строка запроса
print $query2->assemble();
/* Вот она:
SELECT users.* FROM users WHERE (uid = (SELECT blocks.delta FROM blocks WHERE (bid = 2))) LIMIT 2
*/
// Теперь выполним этот запрос
$result = $db->fetchAll($query2);
// Распечатаем массив результатов
print_r($result);
Теперь обратим внимание на строку:
-> where('uid = ?' , $query1)
Запрос 1 будет подставлен вместо знака вопроса. В принципе, можно использовать и конкатенацию, но тогда добавлять скобки придётся руками.
-> where('uid = (' . $query1 . ')' )
Ещё можно так:
-> where('uid = (SELECT delta FROM blocks WHERE bid = 2)')
но это уже совсем быдлокодерство.
P.S.: Сдавайтесь PeaceCoder Zend рулит. Хотя, конечно есть и минусы: они перестраховщики большие - много линних проверок и перепроверок.
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Последний раз редактировалось Tim, 27.02.2010 в 01:04.
|
|
27.02.2010, 01:41
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Tim
|
Запрос 1 будет подставлен вместо знака вопроса. В принципе, можно использовать и конкатенацию,
|
только вот интересно как это происходит конкатенация если на выходе постоянно обьект, а не строка ? Или в пхп принцип -> иной return не влияет на эту команду ?
Сообщение от Tim
|
Сдавайтесь PeaceCoder Zend рулит
|
Рулит но не в том направлении в котором буду делать я. На счет сабов так и подумал...
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Последний раз редактировалось PeaceCoder, 27.02.2010 в 01:44.
|
|
27.02.2010, 02:46
|
|
Профессор
|
|
Регистрация: 05.06.2009
Сообщений: 1,703
|
|
Цитата:
|
только вот интересно как это происходит конкатенация если на выходе постоянно обьект, а не строка ?
|
Нужно определить в классе метод __toString() и он будет автоматически вызываться. Беглый осмотр кода кода Zend показал, что так оно и сделано.
class my_class {
function __toString()
{
return 'Вдруг как в сказке скрипнула дверь ;)';
}
}
$my_obj = new my_class();
print $my_obj;
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Последний раз редактировалось Tim, 27.02.2010 в 03:11.
|
|
|
|