0

登录$Account = 2; $SearchString = "Sally Do";

$search_array = explode(' ',$SearchString);

人员表示例:

ID | Account | FirstName | LastName | Misc Other
---------------------------------------------------
1  | 1       | John      | Doe      | Testing
2  | 2       | John      | Doe      | Pick Me
3  | 2       | Jonh      | Bob      | Not Me

如果可能的话,我想搜索所有表字段而无需指定它们并转义LIKE或最好使用 CodeIgniter 的 Active Query 的值。

SELECT * FROM poeple WHERE Account = 2 AND 
(

PHP 

foreach $search_array 
{
    FirstName LIKE '%svalue%' OR LastName LIKE '%svalue%'
}

)

转义会破坏 SQL 查询,我确定我可能只是做错了什么......

$this->db->escape($search_array[0]);
$this->db->escape($search_array[1]);

我更喜欢纯粹的主动查询,但我不确定这是否可能?

$query = $this->db->select('*')->from('people')->where('Account', $Account)->like(???)->get();

主动查询的主要问题是缺少 () 支持,因此 Account 不会成为OR.

决定使用现有的转义函数(内置于 CI)与非活动查询一起使用

function escape_string($str, $like = FALSE)
{
    if (is_array($str)){
        foreach ($str as $key => $val){
            $str[$key] = escape_string($val, $like);
        }
        return $str;
    }
    mysql_real_escape_string($str);
    if ($like === TRUE){
        $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
    }
    return $str;
}
4

2 回答 2

0

试试这个方法

$this->db->select('*');
$this->db->from('people');
$this->db->where('acount',$account);
if($first_name!='')
{
   $this->db->like('first_name',$first_name);
}
if($last_name!='')
{
   $this->db->like('last_name',$last_name);
}
于 2013-06-17T10:31:52.010 回答
0

试试这个。

$where = "(firstname LIKE '%".$value."%' OR lastname  LIKE '%".$value."%')";
$this->db->SELECT('*');
$this->db->from('people');
$this->db->where($where);
$this->db->where('account', $account);
$this->db->get();
于 2013-06-18T02:50:41.870 回答