Запросы
$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 имеет три метода, которые позволяют делать это:
- $this->db->escape()
Эта функция определяет тип данных, поэтому она экранирует только строковые данные.
Она также автоматически добавляет апострофы вокруг данных, поэтому вы не должны делать этого:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
- $this->db->escape_str()
Эта функция экранирует данные, переданные ей, вне зависимости от типа.
Большую часть времени вы будете использовать функцию выше, а не эту.
Используйте функцию так:
$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
- $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'));
Вопросительные знаки в запросе автоматически заменяются на значения массива во втором параметре.
Вторичная выгода от использования оберток — это автоматическое экранирование значений, благодаря чему запросы становятся более безопасными. Вы не должны помнить про ручное экранирование данных, движок делает это автоматически для вас.