CodeIgniter User Guide Version 2.0.0


Быстрый старт: Примеры кода

Эта страница содержит примеры кода, показывающие, как использовать класс базы данных. Для подробной информации, пожалуйста, прочтите страницы, описывающие каждую функцию.

Инициализация класса БД

Следующий код загружает и инициализирует класс базы данных, на основании ваших конфигурационных параметров:

$this->load->database();

Загруженный класс может быть использован, как показано.

Примечание: Если все ваши страницы требуют доступа к БД, вы можете соединяться автоматически. Смотрите страницу Соединение для получения более подробной информации.

Обычный запрос с множеством результатов (объектная версия)

$query = $this->db->query('SELECT name, title, email FROM my_table');

foreach ($query->result() as $row)
{
    echo $row->title;
    echo $row->name;
    echo $row->email;
}

echo 'Total Results: ' . $query->num_rows();

Выше функция result() возвращает массив объектов. Пример: $row->title

Стандартный запрос с множеством результатов (версия с массивами)

$query = $this->db->query('SELECT name, title, email FROM my_table');

foreach ($query->result_array() as $row)
{
    echo $row['title'];
    echo $row['name'];
    echo $row['email'];
}

Выше функция result_array() возвращает массив с обычными индексами. Например: $row['title']

Тестирование результатов

Если ваши запросы могут не производить результат, возможно тестировать результат функцией num_rows():

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0)
{
   foreach ($query->result() as $row)
   {
      echo $row->title;
      echo $row->name;
      echo $row->body;
   }
}


Примечание переводчика: Пустой результат, возращенный row(), row_array(), result() или result_array(), можно обнаружить простым сравнением с FALSE. Например, if ($result) { что-то делаем } else { echo 'пусто'; }. По факту так работать удобнее. Для функций row_array() и result_array() также возможно использовать is_empty(), если вам так больше нравится.

Примечание переводчика: Удобно присваивать возвращенный результат переменной, имя которой соответствует абстракции (сущности), с которой вы работаете. Это облегчает кодирование и дает особо значительный выигрыш в отладке и при работе с большими фрагментами кода.

Обычный запрос с единственным результатом

$query = $this->db->query('SELECT name FROM my_table LIMIT 1');

$row = $query->row();
echo $row->name;

Выше функция row() возвращает объект. Например: $row->name

Обычный запрос с единственным результатом (версия с массивом)

$query = $this->db->query('SELECT name FROM my_table LIMIT 1');

$row = $query->row_array();
echo $row['name'];

Выше функция row_array() возвращает массив. Пример: $row['name']

Обычная вставка

$sql = "INSERT INTO mytable (title, name)
        VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";

$this->db->query($sql);

echo $this->db->affected_rows();

Запрос Active Record

Паттерн Active Record дает вам упрощенные средства получения данных:

$query = $this->db->get('table_name');

foreach ($query->result() as $row)
{
    echo $row->title;
}

Выше функция get() возвращает все строки из таблицы. Класс Active Record содержит полное описание функций для работы с данными.

Вставка Active Record

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );

$this->db->insert('mytable', $data);

// Produces: INSERT INTO mytable (title, name, date) VALUES ('{$title}', '{$name}', '{$date}')


Примечание переводчика: Active Record — это медвежья сила! Работа через слои, в том числе с Active Record, уже давно является нормой в современном программировании. Напротив, работа без слоев считается муветоном, и это вполне оправдано. Подробности гуглятся.