В предыдущих заметках данной рубрики мы познакомились с Kohanaphp (легким и мощных framework-ом). В этой и последующих статьях я бы хотел показать средства этого фреймворка, которые облегчают работу web-разработчика, так как реализуют операции, которые приходится делать изо дня в день. Пожалуй, наиболее частыми операциями являются всевозможные обращения к базе данных, так как ни одно серьезное web-приложение не обходится без БД. Мы уже бегло затронули тему запросов к БД в первой статье. А в данной заметке мы остановимся на этом вопросе более подробно.Напомню, что настройки соединения с БД производятся в файле application/config/database.php. При необходимости, в этом файле вы можете создать несколько профилей подключения к БД.

Самым главным классом, через который осуществляются запрос к базе данных в Kohanaphp является Database. Если, например, в библиотеке вам необходимо обратиться к базе данных, то необходимо создать экземпляр этого объекта и использовать его методы. Однако, если вы производите обращение к БД в модели, то там уже есть объект класса Database и он доступен через this->db.

Самый низкоуровневый способ обращения к БД это метод query() данного объекта. Метод принимает в качестве первого аргумента шаблон SQL-запроса, и массив данных для этого шаблона в качестве второго аргумента. Второй аргумент не обязателен. Ниже приведен пример получения списка имен пользователей из БД и вывода его в виде ненумерованого списка.

$db=new Database;
$result= $db->query('SELECT username FROM users');
echo '<ul>';
foreach($result as $row) {
       echo '<li>'.$row->username.'</li>';
}
echo '</ul>';

Если необходимо в SQL-запросе использовать величины, то используется второй аргумент метода. Это выглядит так:

$query = $db->query('SELECT `username` FROM `users` '.
              'WHERE `id` = ? AND `status` = ? ', array(12, 'active'));

Каждый вопросительный знак в SQL-запросе будет заменяться данными из массива в порядке следования. При этом данные пропускаются через escape-функцию, которая экранирует спецсимволы предотвращая возможность SQL-инъекции.
Метод query(), однако, понимает и передачу всех данных подряд (без массива) таким образом:

$query = $db->query('SELECT `username` FROM `users` '.
              'WHERE `id` = ? AND `status` = ?', 12, 'active');

Вы можете вибирать что вам больше нравится.
Кроме метода query() у объекта класса Database есть методы группы Database Query Builder Methods. Это группа методов, которая позволяет формировать SQL-запрос частями. Поисходит это так:

1
2
3
$db = new Database();
$db->select('id, title');
$result = $db->from('items')->where(array('id !=' => 5))->get();

SQL-запрос составляется из отдельных частей, как, например, в строке номер 2 происходит создание части запроса касающейся выбираемых полей (SELECT id, title). Каждый метод возвращает объект класса Database, что позволяет после вызова одного метода вызывать следом (в той же строке) другой. Это иллюстрирует строка 3, в которой происходит создание части запроса FROM и WHERE, а так же выполнение составленого зпароса. К моменту выполнения метода get() мы уже имеем запрос вида SELECT id, title FROM items WHERE id <> 5.
Фомирование SQL-запроса частями может быть полезно, если вам надо отобразить результат одного и того же базового запроса с разными фильтрами, которые устанавливает порльзователь на web-странице. В этом случае для объекта, который содержит базовый SQL-запрос нужно будет вызвать методы фильтрации, соответсвующие фильтрам, выбранным пользователем.
С полным списком методов Kohana Database Query Bilder можно ознкомиться на странице докуметации.
Для действий с результататами SQL-запросов служат методы группы Kohana Database Query Result. Я опишу только самые часто используемые.
Метод result() позволяет менять вид результата выборки. Можно выбрать объект $query->result() или ассоциативный массив $query->result(FALSE).

$query = $this->db->query("SELECT `name`, `age` FROM `users`");
 
foreach ($query as $row)
{
   echo $row->name;
   echo $row->age;
}
 
$query->result(FALSE);
 
foreach ($query as $row)
{
   echo $row['name'];
   echo $row['age'];
}

Метод count() позволяет определить сколько строк содержит выборка

$result = $this->db->query("SELECT * FROM users");
echo $result->count(); // 12

Так же часто пригождается метод current(), который возвращает текущую строку выборки. Реже возникает подребность взова таких методов как previous() и next(), которые передвигают указатель в результате выборки на строку назад или вперед.
Вот в общих чертах и вся правда о том как работать с базой данных через Kohanaphp. Подробности всегда в документации Kohanaphp. Но необходимые для правильного понимания вещи я описал. Подпишитесь на RSS, если не хотите пропустить следующую статью о php-фреймворке Kohana.

Tags: , ,

Comments are closed.