当我在PDO中删除多行时,我如何获得受影响行数的计数?这是我用来删除多行的技术:
$selected = $_POST['checkbox'];
$N = count($selected);
for ($i = 0; $i < $N; $i++) {
$result = $dbh->prepare('DELETE FROM users WHERE id= :id');
$result->bindParam(':id', $selected[$i], PDO::PARAM_INT);
$result->execute();
}
我试过了,但它总是返回1:
$deleted = $result->rowCount();
if ($deleted) {
echo $deleted.' was deleted.';
}
你正在运行一个循环,所以每次调用都删除1;你需要添加一个计数器。
添加:
$deleted += $result->rowCount();
循环内
,然后在外面:
if ($deleted) {
echo $deleted.' was deleted.';
}
如果id字段是唯一的,那么该语句最多只能影响1行。然而,您正在准备一个新语句并在循环中执行它。你应该试着把你删除的次数加起来。
$deleted = 0;
for ($i = 0; $i < $N; $i++) {
$result = $dbh->prepare('DELETE FROM users WHERE id= :id');
$result->bindParam(':id', $selected[$i], PDO::PARAM_INT);
$result->execute();
$deleted = $deleted + $result->rowCount();
}
echo $deleted.' was deleted.';
这里有一种方法可以在一次删除中完成,而不是运行多次删除。这样,rowCount()将显示删除的实际结果。
$selected = $_POST['checkbox'];
$placeholder = array();
$values = array();
foreach ($selected as $id) {
$placeholder[] = ":".$id;
$values[":".$id] = $id;
}
$sql = "Delete FROM users WHERE id IN (".implode(', ',$placeholder).") ";
$result = $dbh->prepare($sql);
$result->execute($values);
$deleted = $result->rowCount();
if ($deleted>0) {
echo $deleted.' was deleted.';
}