Запросы
$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, в зависимости от успеха или неудачи. Она НЕ возвращает результат выборки из базы данных, не устанавливает таймер запроса, не компилирует привязки данных, не сохраняет запрос для отладки. Она просто позволяет вам выполнить запрос. Большинство пользователей редко используют эту функцию.
Ручное добавление префиксов
Если вы имеете сконфигурированный префикс БД и хотите добавить его вручную, используйте следующее.
$this->db->dbprefix('tablename');
// устанавливает prefix_tablename
Защита идентификаторов
Во многих базах данных целесообразно защищать имена таблиц и полей — например, обратными слешами в MySQL. Запросы Active Record защищены автоматически, но если вам необходимо защищать идентификаторы вручную, вы можете использовать:
$this->db->protect_identifiers('table_name');
Эта функция также добавит префикс таблицы, предполагая, что вы имеете префикс, указанный в конфигурационном файле. Для того, чтобы включить добавление префиксов, передайте TRUE во втором параметре:
$this->db->protect_identifiers('table_name', TRUE);
Экранирование запросов
Очень хорошая практика безопасности — экранировать ваши данные перед передачей в базу данных. CodeIgniter имеет три метода, которые помогут вам сделать это:
- $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)."%'";
Обертки запросов
Обертки позволяют вам упростить синтаксис запросов, разрешая составлять запросы системе. Исследуем следующий пример:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
Знаки вопросов в запросе автоматически заменяются на значения из массива, который передается вторым параметром функции запроса.
Второй плюс от использования оберток — это то, что значения автоматически экранируются, создавая более безопасные запросы. Вы не должны помнить о необходимости ручного экранирования данных, движок сделает это автоматически для вас.