登录$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;
}