laravel Eloquent/QueryBuilder - 为什么变量$prod 的值变成"?"在 Sql 查询中?

laravel Eloquent/QueryBuilder - Why the value of variable $prod is become"?" in the Sql query?

对不起我的英语语法,..

我想执行此查询,但得到 0 个结果,.. 我尝试检查 ->toSql() 函数,我看到值变成了?,。而不是值 "pork"。 为什么变成(?)问号?以及如何修复它?

这是我的 laravel 使用模型

查询
$items = Item::where("item_type_id", "!=", 1)
            ->where(function ($query) use ($prod){
                    $query->where("description", "like", "'%$prod%'")
                    ->orWhere("id", "'%$prod%'");
            })
            ->toSql(); 
dd($items);

结果是这样,参数变成“?”。

"select * from `items` where `item_type_id` != ? and (`description` like?or `id` =?)"

// Your code is Wrong. Please try this code
        $query = $request->input('query');
        $items = Item::where('description','LIKE',"%$query%",)->get();

? 它调用绑定用于 SQL 注入。如果你想获取绑定变量,那么你可以使用 getBindings() 方法。

查看 getBindings()

的更多详细信息
$items = Item::where("item_type_id", "!=", 1)
            ->where(function ($query) use ($prod){
                    $query->where("description", "like", "'%$prod%'")
                    ->orWhere("id", "'%$prod%'");
            });

$sqlquery = $items->toSql(); 
$bindings = $items->getBindings();

另一种将 ? 替换为值的方法如下。

$sql_with_bindings = str_replace_array('?', $items->getBindings(), $items->toSql());

检查最后执行的查询的另一种方法是 DB::enableQueryLog()

\DB::enableQueryLog();
$items = Item::where("item_type_id", "!=", 1)
              ->where(function ($query) use ($prod){
                   $query->where("description", "like", "'%$prod%'")
                         ->orWhere("id", "'%$prod%'");
                })->get();
dd(\DB::getQueryLog());