我在codeigniter中有简单的数据库查询,但是我无法使用通配符进行搜索。这是我的代码:
$this->db->like('film.title',"%$query%");
$this->db->escape_like_str($query);
$res = $this->db->get('film');
如果我删除通配符(%),那么搜索工作正常。 $ query也只是用户输入的字符串。任何帮助表示赞赏。
答案 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%");
}