Работа с БД: выполнение запросов
- Автор mityok on августа 21st, 2008
$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'); // outputs prefix_tablename
Экранирование идентификаторов
При работе с многими СУБД рекомендуется экранировать названия таблиц и полей - к примеру при помощи символа "`" в MySQL. В случае Active Record идентификаторы полей и таблиц экранируются автоматически, но если вам нужно вручную включить экранирование имен, вы можете сделать следующее:
$this->db->protect_identifiers('table_name');
Экранирование запросов
Экранирование является одним из обязательных условий при разработке безопасного приложения. В 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)."')";
Подстановки в запросах
Подстановки позволяют упростить синтаксис запросов за счет того, что система выполнит подстановку элементов запроса. Рассмотрим следующий пример:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
Знаки вопроса отмечают позиции в строке запроса в которые будут подставлены значения из массива - второго аргумента функции запроса.
Помимо этого преимуществом использования подстановок является то, что значения будут автоматически экранированы. В результате вам не нужно помнить об экранировани - система сделает его за вас.

уау! особо мне
уау!
особо мне понравился последний пример. то, что не надо самому постоянно экранировать, заметно ускоряет работу.
Отправить комментарий