如果我尝试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)
}
答案 0 :(得分:18)
您必须将%
放入绑定数组中:
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);
答案 1 :(得分:1)
在laravel 5.7上,它对我来说非常完美:
$name = "the value that you want to find in the column";
Model::where("field", "LIKE", "\\" . $name . "%")->get()
$name
是您要在包含“%”的列中找到的字符串的一部分
"field"
是该列的字段
您可以输入“%”而不是“ \”(%所有字符)
$TheResult = MyModel::where("myFieldOfMyModel", "like", "%" . $name . "%")->get();
它在laravel 5.7上对我来说非常完美
谢谢
答案 2 :(得分:0)
只是逃避你的变量:
$name = "_";
Model::where("field", "LIKE", "\\" . $name . "%")->get()
希望这有助于某人。