[英]Laravel - how do you SELECT WHERE LIKE?
如果我尝试WHERE email = ?
它工作,但如果我尝试下面的代码,它不会。 有任何想法吗? 谢谢。
DB::connection('operator')->select("SELECT * FROM users WHERE email LIKE '%?%'", array('test'));
这就是getQueryLog()
样子。
array(3) {
["query"]=>
string(213) "SELECT * FROM users WHERE email LIKE '%?%'"
["bindings"]=>
array(1) {
[0]=>
string(1) "test"
}
["time"]=>
float(1.45)
}
你必须把%
放在bindings数组中:
DB::connection('operator')
->select("SELECT * FROM users WHERE email LIKE ?", array('%test%'));
另外,使用Laravel的Eloquent ORM或Query Builder会容易得多
例如,查询构建器的外观如下:
DB::connection('operator')->table('users')->where('email', 'LIKE', '%test%')->get();
在使用用户提供的字符串时, 请记住要逃避任何%
! 像这样:
$escapedInput = str_replace('%', '\\%', $input);
这对laravel 5.7来说非常适合这样:
$name = "the value that you want to find in the column";
Model::where("field", "LIKE", "\\" . $name . "%")->get()
$name
是要在列中找到的字符串的一部分,其中以“%”为标题
"field"
是列的字段,您可以将“%”替换为“\\”(%all chars)
$TheResult = MyModel::where("myFieldOfMyModel", "like", "%" . $name . "%")->get();
它对laravel 5.7来说非常适合我
谢谢
只是逃避你的变量工作:
$name = "_";
Model::where("field", "LIKE", "\\" . $name . "%")->get()
希望这有助于某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.