pdo绑定IN()问题


pdo binding the IN() trouble

我今晚偶然发现了这个,并在SO上找到了一些关于它的不同帖子,然而,我似乎无法得到这个工作。问题在于IN()子句,以及我使用的是PDO预处理语句。

致命错误:未捕获的异常'PDOException'带有消息'SQLSTATE[HY093]: Invalid parameter number' ./test.php:119trace: #0/test.php(119): PDOStatement->execute(Array) #1 {main}在/test.php第119行抛出

…它将在子句中插入以下内容并执行…

(

?, ?, ?, ?, ?)





->执行(美元支撑阵列($ _SESSION("用户")("account_id"),1,2,3,4,5,6

);
$selected = array(1, 2, 3, 4, 5, 6);
echo implode(', ', array_fill(1,count($selected),'?'));
echo implode(', ', $selected);
$stmt = $db->prepare("
    SELECT files.image_filename
    FROM files
        LEFT JOIN users
            on users.user_id = files.user_id
        LEFT JOIN computers
            on computers.computer_id = users.computer_id
        LEFT JOIN accounts
            on accounts.account_id = computers.account_id
    WHERE accounts.account_id = ? AND computers.computer_id IN(". implode(', ', array_fill(1,count($selected),'?')) .") 
");
$stmt->execute(array($_SESSION['user']['account_id'], implode(', ', $selected) ));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
编辑:

我还应该添加,如果我手动输入这个例子中的数字,它会像预期的那样工作:

支撑美元->执行(数组($ _SESSION("用户")("account_id"),1,2,3,4,5,6)),

编辑:

,正如我在op中提到的,但这里又是输出:

?, ?, ?, ?, ?
1, 2, 3, 4, 5, 6

你应该改变

$stmt->execute(array($_SESSION['user']['account_id'], implode(', ', $selected) ));

$stmt->execute(array_merge(array($_SESSION['user']['account_id']), $selected));

在你的代码中,你创建了一个包含2个元素的数组-可能是id和字符串创建自内爆

另一个解决方案是在这行之前添加:

array_unshift($selected, $_SESSION['user']['account_id']);

然后

$stmt->execute($selected);

在这种情况下,你当然要修改$selected array。如果你需要,你可以创建一个副本。

您在SQL语句中使用6 x ?,而绑定由,连接的6个值的单个字符串