Laravel:逃避“LIKE”条款?
如何逃避Laravel/Eloquent中的子句?例如,LIKE
$search = Input::query('sSearch', '');
if($search !== '') {
$paginatedBookings->where('first_name', 'LIKE', '%' . $search . '%');
}
如果包含 或 它们需要转义。$search
%
_
如何逃避Laravel/Eloquent中的子句?例如,LIKE
$search = Input::query('sSearch', '');
if($search !== '') {
$paginatedBookings->where('first_name', 'LIKE', '%' . $search . '%');
}
如果包含 或 它们需要转义。$search
%
_
另一个答案忘记了转义字符本身,这是一个更健壮的解决方案:
/**
* Escape special characters for a LIKE query.
*
* @param string $value
* @param string $char
*
* @return string
*/
function escape_like(string $value, string $char = '\\'): string
{
return str_replace(
[$char, '%', '_'],
[$char.$char, $char.'%', $char.'_'],
$value
);
}
临时解决方案:
$search = Input::query('sSearch', '');
if($search !== '') {
$escSearch = Util::escapeLike($search);
$paginatedBookings->where('first_name', 'LIKE', '%' . $escSearch . '%');
$paginatedBookings->orWhere('last_name', 'LIKE', '%' . $escSearch . '%');
}
class Util {
public static function escapeLike($str) {
return str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $str);
}
}
我希望有与数据库无关且更健壮的东西。我认为你可以在MySQL中更改转义字符,尽管我不知道你为什么会这样做。