Как стать автором
Обновить

Комментарии 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. Не говоря уже о том, что бОльшую часть статьи занимает не информация о моделях, а всякого рода подготовительная работа (настройка конфига БД, создание таблицы и вьюшек). Так скорее можно распугать новичков, да посмешить представителей других фреймворков.

Вообще, весьма странно пробовать модели, но не описать принципы работы с модулем БД.
Мне одному показалось, что статья несколько расширилась?

Query Builder удобен в частности тем, что позволяет переключаться между разными типами баз данных (из MySQL в Oracle, и т.п.)

Не совсем верно. Прямой вызов через query() тоже к какой-то конкретной СУБД не привязывается. Просто не используются специфичные для СУБД обозначения (то же экранирование, к примеру, может различаться, а в MS SQL Server нет поддержки LIMIT, если я не ошибаюсь). Да и в целом удобнее — проще «собирать» запрос по частям.

И еще,
isset($_POST['title']) ? $_POST['title'] : ""

никуда не годится. Это вообще основы Ko3 — используем arr::get($_POST, 'title', '');
Тут видимо имеется ввиду, что Query Builder полюбому генерирует запрос, совместимый со всеми поддерживаемыми БД, т.е. об этом можно даже не задумываться (естественно, если не использовать конструкции типа DB::expr())

Но это, естественно, не единственное его преимущество. Как вы сказали — им удобнее «собирать» запросы, т.е. генерировать их динамически в зависимости от условий или переданных параметров
А чем вам не угодил тренарный оператор? По-моему ничего криминального в использовании его в чистом виде нет, при том что Arr::get() использует именно его.
Так короче, а главное — в стиле Kohana. Если уж использовать фреймворк — так на полную катушку ;) Хотя конечно это далеко не главный минус в коде
По-моему, от этой статьи больше вреда, чем пользы. Те, кто уже знаком с фреймворком, итак знают что как надо делать, а новичков этот «туториал» научит как делать не надо.
1. Про ручное экранирование запросов уже было сказано выше;
2. Модель надо наследовать от класса Model, а не Kohana_Model, иначе вся расширяемость коту под хвост;
3. У модели есть статические метод factory, который предпочтительнее
ну и ещё всякого по-мелочи
(isset($_POST['title'])? $_POST['title']: ""

Для этого есть метод

Arr::get($_POST, 'title', '')

в общем, такое ощущение, что писал дилетант. Не в обиду переводчику, но лучше бы вы написали какой-нибудь свой туториал по этому несомненно замечательному фреймворку, чем переводить такие сомнительного качества материалы
Я Кохану только начинаю изучать (по этому же мануалу, поскольку по третьей версии лучше ничего не нашел).

Если есть материалы лучшего качества в формате туториала, буду чрезвычайно рад ознакомиться.
Вот тут даже на русском :)
Такое впечатление. что автор просто не очень разбирается. Я знаком с Kohana всего полгода и то этот код меня вводит в ужас.

Я бы первый способ использования запросов к базе данных вообще никому не показывал, дабы люди не плодили дыры.

Ладно хоть экранирование какое-то, а то мог вообще этот момент упустить.
А где же описание ORM? Это один из самых кошерных вариантов доступа к БД ведь.
кому как, я предпочитаю DAO
НЛО прилетело и опубликовало эту надпись здесь
В статье используются лишь прямой query() и QueryBuilder. Но вообще да, Вы правы, ORM у Kohana основан на паттерне ActiveRecord.
Изучал Кохану за 3 недели. Это же очень протсо фреймворк, че его изучать то, даже официального куцего мануала в общем-то достаточно. Тако вот что я скажу по статье. Вы меня простите, но это какой-то ппц. Особенно экранирование. За такой код нужно драть долго кверху жопой.
Про ORM лучше отдельную статью. Причем, желательно, не только про стандартный, но и Jelly, Sprig.
public function getLastTenPosts()


Разработчики Kohana слёзно просят не использовать CamelCase
Не говоря уже про то, что вместо getLastTenPosts() лучше использовать getLastPosts($limit)
Согласен с предыдущими ораторами. Обобщаю.

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 предоставляет средства валидации.

В общем, рановато вам статьи писать. От них больше вреда чем пользы.
Спасибо, а подскажите пожалуйста такой момент — как определить то, что mysql после запроса вернёт пустой результат? Ну помимо того что

ничего не выведет.
Парсер такой парсер :(
foreach($posts as $post)
{
echo $post['title'];
echo $post['post'];
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории