Php 插入特殊字符CodeIgniter的问题
我试图将mysql查询本身插入表字段(在满足某些条件时执行一系列查询),但只要查询中有任何特殊字符,就会将其转换为相应的实体 例如,如果Iam将此查询插入表中,则引号将变为“';”、>to和空格to。是否有任何方法可以按原样插入查询并以正确的形式显示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,
"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。现在我修好了。谢天谢地,这是不赞成的