我已经为此工作了4个多小时。我使用我正在做的活动记录选择查询:$ this-> db-> like(' items.name',$ search); 一切正常,但只要在$ search字符串中有单引号(')就会出现此错误:
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便使用附近的' s%'或者
default_items
。short
喜欢'信仰\'\ 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。
答案 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