我正在尝试执行只显示此数组$res
内的文章的查询。它包含文章ID
$res = Array ( [0] => 42 [1] => 41 );
$res1 = $res;
$res2 = $res;
$Search = $db->prepare("
SELECT * FROM articles
WHERE id IN :res1
ORDER BY FIELD(id, :res2);
");
$Search->execute([
':res1' => $res1,
':res2' => $res2
]);
但是返回此错误
致命错误:未捕获PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;查看与您的MariaDB服务器版本对应的手册,以便在#39;附近使用正确的语法。 ORDER BY FIELD(id,?)'在C:\ xampp \ htdocs \ index.php的第2行:16堆栈跟踪:#0 C:\ xampp \ htdocs \ index.php(16):PDO->准备(' \ r \ n \ n \ n t \ t \ tSELECT * F ...')
答案 0 :(得分:3)
您尝试将数组作为参数传递。那不会奏效。此外,IN
在括号内使用逗号分隔列表,而不是如何在PHP中声明数组。
$res = [42, 41];
$params = array_merge($res, $res);
// build a big list of question marks
// for a two element array we get ?,?
$placeholder = trim(str_repeat("?,", count($res)), ",");
$Search = $db->prepare("
SELECT * FROM articles
WHERE id IN ($placeholder)
ORDER BY FIELD(id, $placeholder);
");
$Search->execute($params);
答案 1 :(得分:0)
试试这个。 我知道它错过了您的订单,但我们可以在一分钟内完成。
$res = Array ( '0' => 42 '1' => 41 );
$inQuery = $inQuery = implode(',', array_fill(0, count($res), '?'));
$Search = $db->prepare("
SELECT * FROM articles
WHERE id IN ({$inQuery})
");
$Search->execute($res);