Комментарии 22
$sql = sprintf('INSERT INTO `posts`'."\n". 'SET `title` = %s,'."\n". ' `post` = %s', $this->_db->escape($title), $this->_db->escape($post)); $this->_db->query(Database::INSERT, $sql, FALSE);
Да уж… Вручную экранировать параметры…
Выполнять запросы с помощью модуля Database можно намного красивее, это даже не используя Query Builder. Не говоря уже о том, что бОльшую часть статьи занимает не информация о моделях, а всякого рода подготовительная работа (настройка конфига БД, создание таблицы и вьюшек). Так скорее можно распугать новичков, да посмешить представителей других фреймворков.
Вообще, весьма странно пробовать модели, но не описать принципы работы с модулем БД.
+6
Мне одному показалось, что статья несколько расширилась?
Не совсем верно. Прямой вызов через query() тоже к какой-то конкретной СУБД не привязывается. Просто не используются специфичные для СУБД обозначения (то же экранирование, к примеру, может различаться, а в MS SQL Server нет поддержки LIMIT, если я не ошибаюсь). Да и в целом удобнее — проще «собирать» запрос по частям.
И еще,
никуда не годится. Это вообще основы Ko3 — используем arr::get($_POST, 'title', '');
Query Builder удобен в частности тем, что позволяет переключаться между разными типами баз данных (из MySQL в Oracle, и т.п.)
Не совсем верно. Прямой вызов через query() тоже к какой-то конкретной СУБД не привязывается. Просто не используются специфичные для СУБД обозначения (то же экранирование, к примеру, может различаться, а в MS SQL Server нет поддержки LIMIT, если я не ошибаюсь). Да и в целом удобнее — проще «собирать» запрос по частям.
И еще,
isset($_POST['title']) ? $_POST['title'] : ""
никуда не годится. Это вообще основы Ko3 — используем arr::get($_POST, 'title', '');
+1
Тут видимо имеется ввиду, что Query Builder полюбому генерирует запрос, совместимый со всеми поддерживаемыми БД, т.е. об этом можно даже не задумываться (естественно, если не использовать конструкции типа DB::expr())
Но это, естественно, не единственное его преимущество. Как вы сказали — им удобнее «собирать» запросы, т.е. генерировать их динамически в зависимости от условий или переданных параметров
Но это, естественно, не единственное его преимущество. Как вы сказали — им удобнее «собирать» запросы, т.е. генерировать их динамически в зависимости от условий или переданных параметров
0
А чем вам не угодил тренарный оператор? По-моему ничего криминального в использовании его в чистом виде нет, при том что Arr::get() использует именно его.
0
По-моему, от этой статьи больше вреда, чем пользы. Те, кто уже знаком с фреймворком, итак знают что как надо делать, а новичков этот «туториал» научит как делать не надо.
1. Про ручное экранирование запросов уже было сказано выше;
2. Модель надо наследовать от класса Model, а не Kohana_Model, иначе вся расширяемость коту под хвост;
3. У модели есть статические метод factory, который предпочтительнее
ну и ещё всякого по-мелочи
1. Про ручное экранирование запросов уже было сказано выше;
2. Модель надо наследовать от класса Model, а не Kohana_Model, иначе вся расширяемость коту под хвост;
3. У модели есть статические метод factory, который предпочтительнее
ну и ещё всякого по-мелочи
+5
(isset($_POST['title'])? $_POST['title']: ""
Для этого есть метод
Arr::get($_POST, 'title', '')
в общем, такое ощущение, что писал дилетант. Не в обиду переводчику, но лучше бы вы написали какой-нибудь свой туториал по этому несомненно замечательному фреймворку, чем переводить такие сомнительного качества материалы
Для этого есть метод
Arr::get($_POST, 'title', '')
в общем, такое ощущение, что писал дилетант. Не в обиду переводчику, но лучше бы вы написали какой-нибудь свой туториал по этому несомненно замечательному фреймворку, чем переводить такие сомнительного качества материалы
+3
Такое впечатление. что автор просто не очень разбирается. Я знаком с Kohana всего полгода и то этот код меня вводит в ужас.
Я бы первый способ использования запросов к базе данных вообще никому не показывал, дабы люди не плодили дыры.
Ладно хоть экранирование какое-то, а то мог вообще этот момент упустить.
Я бы первый способ использования запросов к базе данных вообще никому не показывал, дабы люди не плодили дыры.
Ладно хоть экранирование какое-то, а то мог вообще этот момент упустить.
+2
А где же описание ORM? Это один из самых кошерных вариантов доступа к БД ведь.
+1
Изучал Кохану за 3 недели. Это же очень протсо фреймворк, че его изучать то, даже официального куцего мануала в общем-то достаточно. Тако вот что я скажу по статье. Вы меня простите, но это какой-то ппц. Особенно экранирование. За такой код нужно драть долго кверху жопой.
+7
Про ORM лучше отдельную статью. Причем, желательно, не только про стандартный, но и Jelly, Sprig.
0
public function getLastTenPosts()
Разработчики Kohana слёзно просят не использовать CamelCase
0
Согласен с предыдущими ораторами. Обобщаю.
1. SQL-запросы должны получать параметры именно как параметры
2. Limit и Offset надо передавать как параметры. Пример:
public static function get_list($section_id, $offset, $limit) {
$query = DB::select('*')->from(self::TABLE);
$query->where('section_id','=', $section_id);
$query->where('published','<=',new Database_Expression('curdate()'))
$query->where('visible','=',1);
$query->order_by('created', 'DESC');
$query->limit($limit);
$query->offset($offset);
return $query->as_object()->execute();
}
3. Заголовки, ключевые слова и описание в коде — смешение уровней контроллера и представления. Такие вещи лучше выносить в ресурсы.
4. Использовать тег для построения форм ввода не стоит, никак 21-ый век на дворе.
5. Допотопный способ обработки параметров запроса. Нет и намека на номальную валидацию. А ведь Kohana3 предоставляет средства валидации.
В общем, рановато вам статьи писать. От них больше вреда чем пользы.
1. SQL-запросы должны получать параметры именно как параметры
2. Limit и Offset надо передавать как параметры. Пример:
public static function get_list($section_id, $offset, $limit) {
$query = DB::select('*')->from(self::TABLE);
$query->where('section_id','=', $section_id);
$query->where('published','<=',new Database_Expression('curdate()'))
$query->where('visible','=',1);
$query->order_by('created', 'DESC');
$query->limit($limit);
$query->offset($offset);
return $query->as_object()->execute();
}
3. Заголовки, ключевые слова и описание в коде — смешение уровней контроллера и представления. Такие вещи лучше выносить в ресурсы.
4. Использовать тег для построения форм ввода не стоит, никак 21-ый век на дворе.
5. Допотопный способ обработки параметров запроса. Нет и намека на номальную валидацию. А ведь Kohana3 предоставляет средства валидации.
В общем, рановато вам статьи писать. От них больше вреда чем пользы.
0
Спасибо, а подскажите пожалуйста такой момент — как определить то, что mysql после запроса вернёт пустой результат? Ну помимо того что
ничего не выведет.
ничего не выведет.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Знакомство с Kohana 3.0 — Часть 4