Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.0

Search User Guide

# Запросы

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

Для передачи запроса используйте следующую функцию:

`$this->db->query('YOUR QUERY HERE');`

Функция query() возвращает объект результата БД, когда выполняются «читающие» запросы, которые вы можете использовать для вывода результатов. Когда выполняются «пишущие» запросы, она просто возвращает TRUE или FALSE, в зависимости от успеха или неудачи. При получении данных вы обычно будете присваивать запрос к собственной переменной, например так:

`$query = $this->db->query('YOUR QUERY HERE');`

## $this->db->simple_query();

Это упрощенная версия функции $this->db->query(). Она только возвращает TRUE или FALSE, в зависимости от успеха или неудачи. Она не возвращает ни результат выборки, ни таймер, ни компилированные данные, и не сохраняет ваш запрос для отладки. Она просто позволяет вам отправить запрос. Большинство пользователей будут редко использовать эту функцию.

# Работая вручную с префиксами базы данных

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

`$this->db->dbprefix('tablename');
// вернет prefix_tablename`

Если по некоторым причинам вы хотите изменять префикс программно, без создания нового соединения, вы можете использовать этот метод:

`$this->db->set_dbprefix('newprefix');
$this->db->dbprefix('tablename');
// вернет newprefix_tablename`

# Защита идентификаторов

В многих БД желательно защищать имена таблиц и полей, например обратными кавычками в MySQL. Запросы Active Record автоматически защищены, однако, если вам необходимо вручную защитить идентификаторы, вы можете использовать:

`$this->db->protect_identifiers('table_name');`

Эта функция также добавить префикс к вашей таблице, если он указан в файле конфигурации БД. Чтобы включить префиксирование, установите `TRUE` (boolean) во втором параметре:

`$this->db->protect_identifiers('table_name', `TRUE`);`

# Экранирование запросов

Очень хорошая практика безопасности — экранировать данные перед передачей в БД. CodeIgntier имеет три метода, которые позволяют делать это:

1. $this->db->escape() Эта функция определяет тип данных, поэтому она экранирует только строковые данные. Она также автоматически добавляет апострофы вокруг данных, поэтому вы не должны делать этого: `$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";`
2. $this->db->escape_str() Эта функция экранирует данные, переданные ей, вне зависимости от типа. Большую часть времени вы будете использовать функцию выше, а не эту. Используйте функцию так: `$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";`
3. $this->db->escape_like_str() Этот метод следует применять, когда строки могут быть использованы в условии LIKE, например в шаблоне символы ('%', '_') в строке также экранируются. `$search = '20% raise';
   $sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";`

# Обертки запросов

Обертки (bindings) позволяют вам упростить ваш синтаксис запросов, позвляя системе создавать запросы вместе с вами. Рассмотрим следующий пример:

`$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));`

Вопросительные знаки в запросе автоматически заменяются на значения массива во втором параметре.

Вторичная выгода от использования оберток — это автоматическое экранирование значений, благодаря чему запросы становятся более безопасными. Вы не должны помнить про ручное экранирование данных, движок делает это автоматически для вас.

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter