Проблемы со вставкой специальных символов CodeIgniter - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь вставить сам запрос mysql в поле таблицы (выполнение последовательности запросов при выполнении определенных условий), но всякий раз, когда в запросе есть какие-либо специальные символы, он преобразуется в соответствующие ему объекты.

Например, если я вставлю этот запрос в таблицу, кавычка станет "'",> to & gt; и место для & #. Есть ли способ вставить запрос как есть и отобразить в правильном виде.

    "select
      case item_id
      when 206 then '1 Column'
      when 255 then '2 Columns'
      end as split,
      # case oi.product_id
      #   when 24 then 'XXXX'
      #   when 28 then 'CCCC'
      #   when 30 then 'EEEE'
      #   else 'Something Else'
      # end as product,
     case oi.price_id
       when 72 then 'UYT - Single Pay'
       when 73 then 'UYT - Single Pay'
       when 74 then 'UYT - Single Pay'
     else 'Upsell'
     end as product,
     count(distinct(al.cust_id)) as the_count
     from logtable al
     where item_id in (206,255) and
        activity_dts > '2012-01-31 19:15:00' and
        o.order_is_refunded = 0 and
        t.response_code = 1 and
        t.response_reasontext not like '%testmode%'
        group by   1,2;"

Пожалуйста, дайте мне предложения или я что-то упустил здесь. Кодировка, используемая моей установкой CI, - UTF-8.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2012

Попробуйте выполнить

 $data_insert = mysql_real_escape_string($values);

Также вы можете найти его подробно http://php.net/manual/en/function.mysql-real-escape-string.php

0 голосов
/ 24 февраля 2012

Не должно быть никаких проблем с вставкой вашей строки, так как она IS строка, а библиотека базы данных сама по себе не создает никакой кодировки символов, агаик. Какую кодировку составляют база данных и таблицы ? (соединение должно быть UTF-8, согласно настройкам по умолчанию)

Поскольку вы используете фреймворк, вы можете использовать его методы (и , а не mysql_real_escape_string () или, бог, addlashes () !!, как предлагается в других ответах). Это должно работать:

$string_query = "select
      case item_id
      when 206 then '1 Column'
      when 255 then '2 Columns'....";
$sql = "INSERT INTO table(column) VALUES (?)";
$this->db->query($sql, array($string_query));

Привязки запросов автоматически экранируются FOR SQL, поэтому вы в безопасности (вы могли бы использовать ActiveRecord с тем же результатом). Я не знаю, что не может работать в этом, конечно, никакие функции не кодируют HTML.

Возможно, вы делаете кодировку где-то еще: Вы уверены, что не звоните xss_clean(), htmlspecialchars() / htmlentities(), или у вас включена защита XSS, или вы передаете TRUE как второй параметр $this->input->?

Если все вышеперечисленное по какой-либо причине - из-за того, что вы не предоставили достаточно информации - не удается, вы всегда можете закодировать все:

$string_query = base64_encode("select.....");
// HERE YOU MAKE THE INSERT QUERY

и когда вы получите его, вы base64_decode() строки. Но идеальное решение не в этом, оно все равно должно работать без изъянов.

0 голосов
/ 24 февраля 2012

PHP добавляет черты

Эта функция поможет вам добавить запрос вместе с его кавычками, как он есть, в вашей базе данных.

Также вы можете сделать это,

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

как $tmp = "See single' quotes";

или наоборот как:

$tmp = 'See double " quotes';
...