MrC*_*sss 1 php database laravel laravel-5
我正在尝试WHERE IN在Laravel 中的原始查询中绑定数组DB
例:
$arr = [1,2,3];
DB::select(DB::raw("select * from test1 WHERE id IN ? "), [$arr]);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,该数组未更改为以下查询:
select * from test1 WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
有人知道我是否可以这样做吗?
$arr = [1,2,3];
$placeholders = implode(",", array_fill(0, count($arr), '?'));
DB::select("select * from test1 WHERE id IN ($placeholders)", $arr);
Run Code Online (Sandbox Code Playgroud)
这个例子:
在此示例中,我用等于数组长度的问号数量填充一个新数组。然后我粘合新数组,用逗号分隔,并得到“?,?,?, ...”。然后我在括号运算符“IN”之间插入这个子字符串。我将项目数组本身作为选择函数的第二个参数传递。因此,元素数组的每个元素在“IN”运算符中都有自己的占位符。
在laravel中尝试:
$arr = [1,2,3];
$result = DB::table('test1')->whereIn('id', $arr)->get();
dd($result);
Run Code Online (Sandbox Code Playgroud)
并将此用于您的原始查询:
$arr = [1,2,3];
$arr = join(",",$arr);
$result = DB::select(DB::raw("SELECT * FROM test1 WHERE id IN (".$arr.")"));
dd($result);
Run Code Online (Sandbox Code Playgroud)
为了防止sql注入,您可以使用下面提到的类似内容。
$arr = [1,2];
$arr = join(",",$arr);
$result = DB::select(DB::raw("SELECT * FROM test1 WHERE id IN (?,?)"),$arr);
dd($result);
Run Code Online (Sandbox Code Playgroud)
它将为您工作。
| 归档时间: |
|
| 查看次数: |
7301 次 |
| 最近记录: |