插入特殊字符CodeIgniter的问题

时间:2012-02-24 05:27:21

标签: php codeigniter activerecord special-characters

我正在尝试将mysql查询本身插入到表字段中(在满足某些条件时执行一系列查询),但只要查询中有任何特殊字符,就会将其转换为相应的实体。

例如,如果我将此查询插入表格,则引号将变为“'” ,>到& 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 :(得分:0)

PHP addshlashes

此功能将帮助您在数据库中添加查询及其引号。

你也可以这样做,

如果您的查询只有多个单引号,请用双引号括起来:

喜欢$tmp = "See single' quotes";

反之亦然:

$tmp = 'See double " quotes';

答案 1 :(得分:0)

尝试以下

 $data_insert = mysql_real_escape_string($values);

您也可以详细查找http://php.net/manual/en/function.mysql-real-escape-string.php

答案 2 :(得分:0)

插入字符串应该没有任何问题,因为 IS 是一个字符串,并且数据库库本身不进行任何字符编码,afaik。 数据库表格的编码是什么? (根据默认设置,连接应为UTF-8)

由于你正在使用框架,你可以使用它的方法(和不是 mysql_real_escape_string()或者,god,addslashes()!!就像其他答案中建议的那样)。这应该有效:< / p>

$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()字符串。但理想的解决方案不是这个,它无论如何都应该没有缺陷。