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

问题描述 投票:0回答:2

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

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在's%'或default_items.short LIKE'faith \'s%'LIMIT 5'附近使用正确的语法

我刚刚检查了它在我的LIKE查询的活动记录中添加了双反斜杠\\而不是single。我尝试在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.

quotes pyrocms
2个回答
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);

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

© www.soinside.com 2019 - 2024. All rights reserved.