【问题标题】:laravel Eloquent/QueryBuilder - Why the value of variable $prod is become"?" in the Sql query?laravel Eloquent/Query Builder - 为什么变量 $prod 的值变成“?”在 Sql 查询中?
【发布时间】:2020-05-15 16:19:48
【问题描述】:

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

我想执行这个查询,但得到 0 结果,.. 我尝试签入 ->toSql() 函数,我看到值变成了?,。而不是值是“猪肉”,。 为什么变成(?)问号?以及如何解决?

这是我使用模型的 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` =?)"

【问题讨论】:

    标签: mysql sql laravel eloquent laravel-query-builder


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

    【讨论】:

    • 非常感谢@Md.Azizur ,..你是对的!你修复我的代码,.. 它是" %$prod% " 不是这个" '%$prod%' ",.. 我得到了结果,.. 但@Dilip 得到了这个帖子问题的确切答案,。对不起,我会检查他的答案,....非常感谢兄弟。//
    【解决方案2】:

    ? 是用于 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();
    

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

    $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());
    

    【讨论】:

    • 非常感谢@Dilip,我使用启用 QuearyLog() 得到了结果,.. 我得到了这个结果,...array:1 [ 0 => array:3 [ "query" => "select * from `items` where `item_type_id` <> ? and (`description` LIKE ? or `id` like ?)" "bindings" => array:3 [ 0 => 1 1 => "%pork%" 2 => "%pork%" ] "time" => 7.46 ] ]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2019-04-19
    相关资源
    最近更新 更多