35

codeigniter で単純なデータベース クエリを使用していますが、ワイルドカードを使用して検索を行うことができません。これは私のコードです:

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

ワイルドカード (%) を削除すると、検索が正常に機能します。また、$query はユーザー入力を含む単なる文字列です。どんな助けでも大歓迎です。

4

7 に答える 7

59

$this->db->like()%s を自動的に追加し、文字列をエスケープします。だからあなたが必要とするのは

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

参照用に CI ドキュメントを参照してください: CI 2CI 3CI 4

于 2013-04-26T00:47:18.963 に答える
12

ユーザーができるようにフルの場合:

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

%$query には、使用できます

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

$query% には使用できます

$this->db->like('title', $query, 'after');
于 2016-06-18T04:32:23.307 に答える
2

ワイルドカード (%) を使用したくない場合は、オプションの 3 番目の引数にオプション 'none' を渡すことができます。

$this->db->like('title', 'match', 'none'); 
// Produces: WHERE title LIKE 'match'
于 2014-06-30T11:22:47.163 に答える
0

私は使用しています

$this->db->query("SELECT * FROM film WHERE film.title LIKE '%$query%'"); for such purposes
于 2013-04-26T00:34:29.603 に答える
-2

複数のフィールドを一度に検索するには、次のようにします...

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%");
}
于 2017-06-17T16:34:39.833 に答える