我做了一些分配参数的方法,但它不起作用
这是我的代码:
$sqlDefault = "Select * from histories as h where h.status like % :status %";
return DB::select(DB::raw($sqlDefault), ['status' => $status]);
它没有用,所以我尝试了另一种分配方式:
'%:status%'
或'%':status'%'
但这不起作用
现在我不使用参数,它完美地工作
$sqlDefault = "Select * from histories as h where h.status like '%$status%'";
问题是如何在使用带有“%”的运算符时使用参数?
答案 0 :(得分:4)
将$status
替换为'%'.$status.'%'
$sqlDefault = "Select * from histories as h where h.status like :status ";
return DB::select(DB::raw($sqlDefault,['status' => '%'.$status.'%']));
或仅使用select:
return = DB::select(sqlDefault , ['status' => '%'.$status.'%']);
答案 1 :(得分:3)
预备声明的占位符在'%...%'
内不起作用,因为它后来被视为string
值而不是placeholder
。您需要直接放置占位符,然后传递包含"%{$variable}%"
的值。
试试这个
$sql = "SELECT * FROM `histories` AS h WHERE `h`.`status` LIKE :status";
return DB::select($sql, [ 'status' => "%{$status}%" ]);
答案 2 :(得分:0)
如果要查看运行的查询,可以使用dd(DB::getQueryLog())
。
试试这个:
$result = DB::table('histories')->where('status', 'like', '%' . $status . '%')->get();
答案 3 :(得分:0)
尝试此操作而不指定参数
DB::table('histories')
->where('status' , 'like', '%'. $status .%' )
->get();
或者你可以像这样使用直接历史app类
在顶部添加use App/Histories;
并使用这样的查询
Histories::where('status' , 'like', '%'. $status .%' )->get();