我使用的是Laravel 5.1,并有以下简单查询:
$searchTerm = 'random word';
$subQuery = DB::table('userprofile')->selectRaw("
user_id,
MATCH(first_name, last_name) AGAINST('?*' IN BOOLEAN MODE) AS search_score
")
->addBinding($searchTerm)
->get();
这不会返回任何,但当我直接用替换引号时
... AGAINST('$searchTerm*' IN BOOLEAN MODE) ...
那么结果是正确的。但是,如果我做
DB::getQueryLog();
我得到
"query" => "select `user_id`, MATCH(first_name, last_name) AGAINST('?*' IN BOOLEAN MODE) AS search_score from `userprofile`"
"bindings" => array:1 [
0 => "random word"
]
因此,似乎应该添加绑定,但事实并非如此。我已经尝试了其他地方建议的select、selectRaw、->setBindings、->addBinding($searchTerm、['select'])等的所有变体。如何使这些绑定工作?
你试过这样替换整个正则表达式吗?
$searchTerm = 'random word*';
$subQuery = DB::table('userprofile')->selectRaw("
user_id,
MATCH(first_name, last_name) AGAINST(? IN BOOLEAN MODE) AS search_score
")
->addBinding($searchTerm)
->get();
这样,如果拉拉威尔加上这些额外的引号,可能就不会加上它们了。