簡體   English   中英

DB::raw laravel 5.4 中的數組綁定

[英]WHERE IN array binding in DB::raw laravel 5.4

我正在嘗試在 Laravel DB中的原始WHERE IN查詢中綁定一個數組

例子:

$arr = [1,2,3];
DB::select(DB::raw("select * from test1 WHERE id IN ? "), [$arr]);

出於某種原因,數組沒有更改為以下查詢:

select * from test1 WHERE id IN (1,2,3)

有人知道我能不能以某種方式做到這一點?

在 Laravel 中嘗試一下:

$arr = [1,2,3];
$result = DB::table('test1')->whereIn('id', $arr)->get();
dd($result);

並將此用於您的原始查詢:

$arr = [1,2,3];
$arr = join(",",$arr);
$result =  DB::select(DB::raw("SELECT * FROM test1 WHERE id IN (".$arr.")"));
dd($result);

為了防止 sql 注入,您可以使用我在下面提到的類似方法。

 $arr = [1,2];
 $arr = join(",",$arr);
 $result =  DB::select(DB::raw("SELECT * FROM test1 WHERE id IN (?,?)"),$arr);
 dd($result);

這對你有用。

DB::table("test1")->whereIn('id', $arr)->get();

https://laravel.com/docs/5.4/queries#where-clauses

$arr = [1,2,3];
$placeholders = implode(",", array_fill(0, count($arr), '?'));

DB::select("select * from test1 WHERE id IN ($placeholders)", $arr);

這個例子:

  1. 支持任意長度的數組
  2. 不包含循環
  3. 安全地傳遞參數

在這個例子中,我用等於數組長度的問號數填充了一個新數組。 然后我粘上新數組,用逗號分隔,並得到“?,?,?,......”。 然后我在括號運算符“IN”之間插入這個子字符串。 我將項目數組本身作為 select 函數的第二個參數傳遞。 因此,元素數組的每個元素在“IN”運算符中都有自己的占位符。

或雄辯:

$q= TestModel::where('id',$arr)->get();

嘗試:

$array = [2,5,9,7,5];
$arrPos = [];
$arrBind = [];
foreach ($array as $pos => $id) {
    $arrPos[] = ":id_{$pos}";
    $arrBind["id_{$pos}"] = $id;
}

$sql = 
"  SELECT * FROM test1 WHERE id IN (".implode(', ', $arrPos).") ";
$rs = DB::select($sql, $arrBind);

任何人都可以如何進行多參數綁定?

$userTypeID = [1,2,3];
$userDeptID = [1,4,6];
$arr = join(",",$arr);
DB::select("select * from users WHERE userTypeID IN (?,?,?) AND userDeptID IN(?,?,?)");

我被這個問題困了這么久。 感謝幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM