【发布时间】:2019-08-10 00:29:05
【问题描述】:
我有这个查询:
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 category...', 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 name...', Array) #5 /var/www/categ.class.php(81): Illuminate\Database\Capsule\Manager::__callStatic('select ', Array) #6 /var/www/categ.class.php(123): Site\Naviga in /var/www/vendor/illuminate/database/Connection.php on line 664
我不明白为什么会这样。我正在尝试回显变量 $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"
]
【问题讨论】:
-
检查
$str和$arr包含的内容。 -
@SougataBose 一个字符串和一个数组。包含多个
?的字符串。以及每个?的数组值。 -
我们可以看到。添加它实际包含的内容。
-
您可以使用
whereIn('column', $arr)而不是构建自己的查询 -
@SougataBose 添加