Запросы 

    Основы Запросов 

    Регулярные Запросы 

    Для выполнения запроса используйте функцию query:

    $this->db->query('ВАШ ЗАПРОС');
    

    Функция query() возвращает объект результата запроса к бд. Когда тип запросов “чтение” - можно использовать для отображения результатов. Когда тип запросов “запись” он просто возвращает TRUE или FALSE в зависимости от успеха или неудачи. При получении данных обычно записывают запрос в отдельную переменную:

    $query = $this->db->query('ВАШ ЗАПРОС');
    

    Упрощенные Запросы 

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

    Он возвращает функцию базы данных “выполнение”. Что обычно TRUE/FALSE при успехе или неудаче для запросов типа INSERT, DELETE или UPDATE (что действительно должно быть использовано) и ресурс/объект при успехе для запросов с извлечением результататов.

    if ($this->db->simple_query('ВАШ ЗАПРОС'))
    {
            echo "Успех!";
    }
    else
    {
            echo "Запрос рухнул!";
    }
    

    Примечание

    Функция pg_exec() PostgreSQL (для примера) всегда возвращает ресурс при успехе, даже для запросов типа “запись”. Так учтите это, если вы ищете логическое значение.

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

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

    $this->db->dbprefix('tablename'); // выведет prefix_tablename
    

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

    $this->db->set_dbprefix('newprefix');
    $this->db->dbprefix('tablename'); // выведет newprefix_tablename
    

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

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

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

    Важно

    Хоть построитель запросов будет стараться правильно цитировать любые поля и имена таблиц, которые вы ему передаете, обратите внимание, что он НЕ предназначен для работы с вводом данных пользователем. НЕ ПЕРЕДАВАЙТЕ ему непроверенные данные пользователя.

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

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

    Безопасность Запросов 

    Безопасность - очень хорошая практика безопасности ваших данных перед отправкой в базу. CodeIgniter имеет три метода, которые помогут вам сделать это:

    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)."%' ESCAPE '!'";
    

    Важно

    Метод escape_like_str() использует ‘!’ (знак восклицания) во избежание специальных символов для LIKE условий. Поскольку этот метод избегает обертки в кавычки себя, он не может автоматически добавить ESCAPE '!' условие для вас и поэтому вам придется делать это вручную.

    Привязки Запроса 

    Привязки позволяют упростить синтаксис запросов позволяя системе собрать запросы для вас. Рассмотрим следующий пример:

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

    Знаки вопроса в запросе, автоматически заменяются значения в массиве в качестве второго параметра функции запроса.

    Привязки также и для работы с массивами, которые будут преобразованы в IN наборах:

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

    Результат запроса будет:

    SELECT * FROM some_table WHERE id IN (3,6) AND status = 'live' AND author = 'Rick'
    

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

    Обработка Ошибок 

    $this->db->error();

    Если вам нужно получить последнюю ошибку, которая произошла, метод error() возвращает массив, содержащий её код и сообщение. Вот быстрый пример:

    if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`'))
    {
            $error = $this->db->error(); // Имеет ключи 'code' и 'message'
    }