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

CodeIgniter User Guide Version 2.1.0


Запросы

$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

Яндекс.Метрика