致命错误:[]运算符不支持使用PDO进行多次删除字符串

时间:2014-01-02 18:16:53

标签: php mysql pdo

我有这个代码应该删除其复选框被选中的所有行(使用复选框多次删除)。

if (isset($_POST['del'])) {

    $stmt = $db->prepare("DELETE FROM `$tbl_name` WHERE id=:id");
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);
    $ids = array();
    foreach ($_POST['del'] as $pval) {
    $ids[] = (int)$pval;
    $ids = implode(',',$ids);
    $stmt->execute();
    }
    echo '<h1>Entries deleted.</h1>';
}

这是表单生成代码:

echo '<td><input type="checkbox" name="del[]" value="' . (int)$row['id'] . '"></td>';

如果选中单个复选框或单个删除,一切正常。 但对于多个复选框,会导致致命错误:

Fatal error: [] operator not supported for strings in

我错过了什么?

1 个答案:

答案 0 :(得分:4)

此行导致致命错误,因为您使用$ids的字符串结果覆盖数组implode(),但在下一次循环迭代尝试使用[]再次附加到它。

$ids = implode(',',$ids);

应该删除。您已绑定$id,因此您可以execute()在循环中$id

if (isset($_POST['del'])) {
    // Prepare the statement before the loop
    $stmt = $db->prepare("DELETE FROM `$tbl_name` WHERE id=:id");
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);

    // Execute the prepared statement in the loop with the ids from $_POST
    // This is all you need, since $id is bound 
    foreach ($_POST['del'] as $id) {
      $stmt->execute();
    }
    echo '<h1>Entries deleted.</h1>';
}

该方法使用循环。如果将$_POST['del']中的每个值与其自己的?绑定,也可以使用位置参数执行单个语句。这是更多的工作,如果您要在每个循环中删除批次项目,这可能是值得的。