[英]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.