0

いくつかのレコードが含まれている HTML フォームがあります。チェックボックスに対応する 1 つまたはすべてのレコードを選択して、レコードを削除する必要があります。

レコードのチェックボックスを選択して [削除] をクリックすると、クエリは正常に実行されますが、レコードは削除されません。

PHPコードは次のとおりです。

if(isset($_POST['delete']))
{ 
    $allCheckBoxId = $_POST['chkDel'];

    array_map ('mysql_real_escape_string', $allCheckBoxId);
    $ids = implode(",", $allCheckBoxId);

    $object=new connection();
    $object=$object->dbConnect();


    $st=$object->prepare(
        "delete * from banners where bannerid IN (?)");

    $st->bindParam(1, $ids);
    $delete=$st;
    $delete->execute();
    if($delete)
    {
        echo "record deleted successfully." . 
             "This will go to banners within 5 sec";

    }
    else
    {
        echo "not deleted";

    }
}

そしてHTMLフォーム:

<form name="myform" action="listbanners.php" method="post" OnSubmit="return onDelete();" id="frm1">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <th width="13"><input type="checkbox" class="checkbox" title="select all" onclick="checkAll(document.myform.chkDel);" name="CheckAll" /></th>
        <th width="13">ID</th>
        <th>Name</th>
        <th><input type="submit" name="delete" value"Delete"></th>
    </tr>
    <?php
        $object=new connection();
        $object=$object->dbConnect();
        $st=$object->prepare("select * from banners order by bannerid desc");
        $st->execute();
        while($row=$st->fetch(PDO::FETCH_ASSOC))
        {
    ?>

    <tr>
        <td><input name="chkDel[]" type="checkbox" title="select" class="checkbox" value="<?php echo $row['bannerid'];?>"/></td>
        <td><?php echo $row['bannerid'];?></td>
        <td><h3 onClick="location='editbanner.php?bannerid=<?php echo $row['bannerid'];?>'"><?php echo $row['file'];?></h3></td> 
        <td><input type="submit" name="delete" value="delete"/></td>
    </tr>
</form>
4

1 に答える 1

2
$st=$object->prepare("delete * from banners where bannerid IN (?)");
$st->bindParam(1, $ids);

単一のパラメーターを値の配列にバインドしようとしています。各値を個別のパラメーターとして渡す必要があります。例えば:

$st=$object->prepare("delete * from banners where bannerid IN (?,?,?)");

IN 句に含めたい値ごとにプレースホルダーを含める必要があります。にあるアイテムの数に基づいて、SQL を動的に生成できます$ids

「DELETE *」がありませんでした。これは無効な構文です。しかし、私が気づいた点が有効であるため、これをそのままにしておきます。これは不完全な回答であり、間違った回答ではありません。

于 2012-11-09T17:19:58.437 に答える