簡體   English   中英

刪除 PDO 中的多行

[英]DELETE multiple rows in PDO

我是 PDO 的新手,我已經對我面臨的問題進行了一些搜索,但我無法找到任何有關它的答案。 正如你在下面看到的,我有這個功能:

function deleteInfo($id){
    $pdo = connPDO();
    $deleteInfo = $pdo -> prepare("DELETE FROM game_locais_zumbis WHERE id_zumbi IN (:id)");
    $deleteInfo -> bindValue(":id", $id, PDO::PARAM_STR);
    $deleteInfo -> execute();
    $pdo = null;
}

之后,我有以下代碼:

while($row = $listInfo -> fetch(PDO::FETCH_ASSOC)){
    $ids[] = $row['ids'];
}
$ids = implode(',', $ids);
deleteInfo($ids);

當我回顯我的 $ids 時,我得到:

1、2、3、4、5

但是 DELETE 函數不會刪除我的數據庫中的所有這五行,而只是刪除第一行,例如“1”。 當我在我的數據庫中運行完全相同的 DELETE 函數時,將“:id”替換為“1,2,3,4,5”,它確實有效! 有人知道我在這里有什么錯誤嗎? 我很感激任何幫助。

我會這樣做:

$query = "DELETE FROM game_locais_zumbis WHERE id_zumbi in (".str_repeat("?,", count($ids) - 1)."?)";
$stmt = $conn->prepare($query);
$stmt->execute($ids);

不幸的是,您無法使用准備好的語句綁定元素數組。 您必須直接在查詢中構建它們。

function deleteInfo($ids)
{
    $pdo = connPDO();

    if (!is_array($ids))
        $ids = array($ids); // if it is just one id not in an array, put it in an array so the rest of the code work for all cases

    $ids = array_map([$pdo, 'quote'], $ids); // filter elements for SQL injection

    $pdo->exec('DELETE FROM game_locais_zumbis WHERE id_zumbi IN (' . implode(', ', $ids) . ')');
}

請記住將數組傳遞給deleteInfo()而不是將其內deleteInfo()為字符串。

這就是我完成它的方式並且它起作用了。 我創建了一個數組並循環遍歷它。

<?php
    // set a database connection

    $host = "localhost";
    $user ="root";
    $password = "";
    $db = "pdopost";

    //Set a DSN
    $dsn = 'mysql:host ='.$host . ';dbname='.$db;
    
    // Create a PDO instance
    $pdo = new PDO ($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

    
    $ids=['6', '7'];
        
    foreach($ids as $id){

    $sql = "DELETE FROM posts WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$id]);

    }

    echo 'Deleted in the database';
   
?>
 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM