Laravel - 你如何选择在哪里?

时间:2015-01-09 15:32:18

标签: php select laravel sql-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)
  }

3 个答案:

答案 0 :(得分:18)

您必须将%放入绑定数组中:

DB::connection('operator')
    ->select("SELECT * FROM users WHERE email LIKE ?", array('%test%'));

使用Laravel' Eloquent ORMQuery 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()

希望这有助于某人。