我正在尝试将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。
答案 0 :(得分:0)
此功能将帮助您在数据库中添加查询及其引号。
你也可以这样做,
如果您的查询只有多个单引号,请用双引号括起来:
喜欢$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()
字符串。但理想的解决方案不是这个,它无论如何都应该没有缺陷。