我有这个查询:
use Illuminate\Database\Capsule\Manager as DB;
$arr = [/* Array values here */];
$in = str_repeat('?,', count($arr) - 1) . '?';
$str = "SELECT ... FROM ... WHERE ... AND ... IN ($in)";
$select_categories = DB::select($str, $arr);
现在我收到错误Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number
,这是堆栈跟踪:
/var/www/vendor/illuminate/database/Connection.php:330堆栈跟踪:#0 /var/www/vendor/illuminate/database/Connection.php(330):PDOStatement-> execute()#1 /var/www/vendor/illuminate/database/Connection.php(657):Illuminate\Database\Connection->Illuminate\Database{closure}('SELECT categori ...',Array)#2 / var / www / vendor /illuminate/database/Connection.php(624):Illuminate \ Database \ Connection-> runQueryCallback('SELECT categori ...',Array,Object(Closure))#3 / var / www / vendor / illuminate / database / Connection .php(333):Illuminate \ Database \ Connection-> run('SELECT name ...',Array,Object(Closure))#4 /var/www/vendor/illuminate/database/Capsule/Manager.php(199 ):Illuminate \ Database \ Connection-> select('SELECT名称...',数组)#5 /var/www/categ.class.php(81):Illuminate \ Database \ Capsule \ Manager :: __ callStatic('select ',数组)#6 /var/www/categ.class.php(123):Site \ Naviga在664行的/var/www/vendor/illuminate/database/Connection.php中
我不知道为什么会这样。我试图回显变量$str
和$arr
,以查看?
的数量是否与数组的计数匹配,并且确实如此。所以我看不到为什么会生成该错误。有想法吗?
在堆栈中有3个自变量run('SELECT name...', Array, Object(Closure))
,这可能是引起问题的原因,因为它认为没有第三个参数?还是类似的东西?
编辑:
$str
包含:"?,?,?,?,?,?"
$arr
包含:[94, 91, 97, 92, 96, 90]
dd($str, $arr);
的结果:
"SELECT ... FROM ... WHERE ... IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?) ORDER BY pro.sort_order"
array:14 [
0 => "56"
1 => "163"
4 => "64"
6 => "53"
7 => "52"
10 => "55"
12 => "59"
13 => "57"
28 => "157"
43 => "60"
49 => "133"
68 => "287"
101 => "54"
109 => "278"
]
答案 0 :(得分:2)
解决方案是在$arr
方法中使用array_values($arr)
而不是select()
:
$select_categories = DB::select($str, array_values($arr));
$in
具有14个?
,而$arr
具有14个元素。之所以不起作用,是因为$arr
的索引不是从0
到13
,而是从0
到109
。由于索引是整数而不是字符串,因此即使有一些0
,也存在从109
到null
的所有索引,因此$arr
的大小为110
。
在array_values()
上使用$arr
的效果:
array:14 [
0 => "56"
1 => "163"
2 => "64"
3 => "53"
4 => "52"
5 => "55"
6 => "59"
7 => "57"
8 => "157"
9 => "60"
10 => "133"
11 => "287"
12 => "54"
13 => "278"
]