CodeIgniter喜欢在搜索字符串中使用单引号查询

时间:2013-09-17 16:03:24

标签: quotes pyrocms

我已经为此工作了4个多小时。我使用我正在做的活动记录选择查询:$ this-> db-> like(' items.name',$ search); 一切正常,但只要在$ search字符串中有单引号(')就会出现此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便使用附近的' s%'或者default_itemsshort喜欢'信仰\'\ n \ n' s%'限制5'在第5行

我刚刚检查过它在LIKE查询的活动记录中添加了双反斜杠\\而不是单一斜杠。我在MySQL中尝试删除一个斜杠,它正在工作。

我的代码:

$q = "faith's";
$query = $this->db->select('items_categories.slug as category_slug, items_categories.name as cat_name, items.name, items.price_value, items.cover_photo, items.slug');
$query->select('default_items.short as short',false);
$query->select('date(default_items.date_created) as date_created',false);
$query->join('items_categories','items_categories.id=items.root_id','inner');
$query->join('users','items.company_id=users.id','inner');
$query->like('items.name',$q);
$query->or_like('items.short',$q);
$query->limit(5);
$result =  $query->get($this->_table);
$both_prod_results = $result->result();

我正在使用pyrocms 2.x。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下代码,也许它可以帮助您,但您必须在请求中的每个'之前添加\:

$value = "faith\'s";
$sql_request = "`short`  LIKE '%". $value ."%'";

$query = $this->db
              ->select('*')
              ->where($sql_request, null, false)
              ->get('default_items');

$result = $query->result();

dump($result);

答案 1 :(得分:0)

我想我需要回答我自己的问题。 那么这是一个黑客(不要认为它是否安全) 我修补了我的MYSQLI驱动程序:

我已经取代了这个:

return str_replace(array($this->_like_escape_chr, '%', '_'),
                    array($this->_like_escape_chr.$this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
                    $str);

用这个:

return str_replace(array($this->_like_escape_chr, '%', '_'),
                    array($this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
                    $str);

它增加了额外的斜线。并且也不认为它会允许sql注入等任何东西。

如果有人知道这是对的,请发表评论。

由于 Umair