Codeigniter LIKE与通配符(%)

时间:2013-04-26 00:30:27

标签: mysql sql codeigniter activerecord

我在codeigniter中有简单的数据库查询,但是我无法使用通配符进行搜索。这是我的代码:

$this->db->like('film.title',"%$query%");
$this->db->escape_like_str($query);
$res = $this->db->get('film');

如果我删除通配符(%),那么搜索工作正常。 $ query也只是用户输入的字符串。任何帮助表示赞赏。

7 个答案:

答案 0 :(得分:39)

$this->db->like()自动添加%s并转义字符串。所以你需要的只是

$this->db->like('title', $query);
$res = $this->db->get('film');

请参阅CI文档中的Active Record Class (CI 2)Query Builder Class (CI 3)以供参考。

答案 1 :(得分:8)

Fur Full就像你可以使用:

app.use(require('connect-flash')());
app.use(function (req, res, next) {
  res.locals.messages = require('express-messages')(req, res);
  next();
});

对于%$查询,您可以使用

$this->db->like('title',$query);

和$ query%可以使用

$this->db->like('title', $query, 'before');

答案 2 :(得分:7)

  $this->db->like('title', 'match', 'before'); 
 // Produces: WHERE title LIKE '%match' 

 $this->db->like('title', 'match', 'after'); 
// Produces: WHERE title LIKE 'match%' 

$this->db->like('title', 'match', 'both'); 
// Produces: WHERE title LIKE '%match%'

答案 3 :(得分:3)

$this->db->like()

此方法使您可以生成LIKE子句,对进行搜索很有用。

$this->db->like('title', 'match');

产品:在title类似“%match%”

如果要控制放置通配符(%)的位置,则可以使用可选的第三个参数。您可以选择“之前”,“之后”,“无”和“两者”(默认设置)。

$this->db->like('title', 'match', 'before');

产地:title像'%match'

$this->db->like('title', 'match', 'after');

产地:title像“匹配%”

$this->db->like('title', 'match', 'none');

产地:title喜欢“比赛”

$this->db->like('title', 'match', 'both');

产品:在title类似“%match%”

答案 4 :(得分:1)

我正在使用

$this->db->query("SELECT * FROM film WHERE film.title LIKE '%$query%'"); for such purposes

答案 5 :(得分:1)

如果您不想使用通配符(%),可以将选项'none'传递给可选的第三个参数。

$this->db->like('title', 'match', 'none'); 
// Produces: WHERE title LIKE 'match'

答案 6 :(得分:-1)

一次搜索多个字段可以这样完成......

function search($search)
{
    $sql = "SELECT * FROM some_table
    WHERE UPPER(a_name) LIKE ?
    OR
    UPPER(a_full_name) LIKE ?
    OR
    UPPER(a_city) LIKE ?
    OR
    UPPER(a_code) LIKE ?
    ";
    $arr = array_map(array($this,"wrapLIKE"),array($search, $search, $search, $search));
    $r = $this->db->query($sql, $arr);
    return $r;
}

function wrapLIKE($string)
{
    return strtoupper("%$string%");
}