0

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

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 's%' OR 附近使用的正确语法default_itemsshortLIKE 'faith\'s%' LIMIT 5' 在第 5 行

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

我的代码:

$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。

4

2 回答 2

0

我想我需要回答我自己的问题。好吧,这是一个 hack(不要认为它是否安全)我已经修补了我的 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注入等任何东西。

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

谢谢乌梅尔

于 2013-09-18T09:45:13.290 回答
0

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

$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);
于 2013-09-17T19:53:20.123 回答