Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入特殊字符CodeIgniter的问题_Php_Codeigniter_Activerecord_Special Characters - Fatal编程技术网

Php 插入特殊字符CodeIgniter的问题

Php 插入特殊字符CodeIgniter的问题,php,codeigniter,activerecord,special-characters,Php,Codeigniter,Activerecord,Special Characters,我试图将mysql查询本身插入表字段(在满足某些条件时执行一系列查询),但只要查询中有任何特殊字符,就会将其转换为相应的实体 例如,如果Iam将此查询插入表中,则引号将变为“';”、>to和空格to&#。是否有任何方法可以按原样插入查询并以正确的形式显示 "select case item_id when 206 then '1 Column' when 255 then '2 Columns' end as split,

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

例如,如果Iam将此查询插入表中,则引号将变为“';”、>to和空格to&#。是否有任何方法可以按原样插入查询并以正确的形式显示

    "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。

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

你也可以这样做

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

比如
$tmp=“参见单引号”

反之亦然,例如:

$tmp = 'See double " quotes';
试着跟随

 $data_insert = mysql_real_escape_string($values);

此外,您还可以找到详细信息

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

由于您使用的是框架,您可以使用它的方法(和notmysql\u real\u escape\u string()或,天哪,addslashes()!!就像其他答案中建议的那样)。这应该可以工作:

$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));
SQL的查询绑定会自动转义,因此您是安全的(您可以使用具有相同结果的ActiveRecord)。我不知道这里面有什么不能工作,当然没有函数编码html

可能您正在其他地方进行编码:您确定您没有调用
xss_clean()
htmlspecialchars()
/
htmlentities()
,或者您启用了xss保护,或者您将TRUE作为
$this->input->
的第二个参数传递

如果由于某种原因(因为您没有提供足够的信息)上述所有操作失败,您可以对所有内容进行编码:

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

当您检索它时,您将
base64\u decode()
字符串。但理想的解决方案不是这样,它无论如何都应该可以正常工作。

您的意思是将整个查询作为“字符串”插入mysql表列中?htmlspecialchars和htmlspecialchars不起作用吗?是的。作为字段类型字符串的整个查询是文本。我正在使用CI的活动记录执行查询。但当我尝试使用通常的insert into语句从phpmyadmin插入查询时,它成功了。有什么想法吗?Addlashes()?2012年?当使用框架时?真正地手册甚至还说,强烈建议使用DBMS特定的转义函数
@DamienPirsy在您的生活中,当您发现您的框架无法支持100%的需求时。所以,不管是2012年还是1012年,有时是务实的,这都不是罪过:)你知道,这里一直有mysq_real_escape_string()?不管怎么说,问题出在斜杠上?OP说了一些关于字符编码的内容
引号将变成“';”,>to和space to&#addsleshes()对这有什么好处?@JayeshAmbali好的,你已经说过了。桌子呢?田野呢?你试过我的建议了吗?尤其是粗体部分数据库编码是UTF-8 Unicode。我知道我们不能使用mysql_real_escape_string()或者,天哪,addslashes()来实现这个目的。是的,我在验证时一直在使用xss_clean。现在我修好了。谢天谢地,这是不赞成的