获取多次删除影响的行数
Get the number of rows affected by multiple delete
当我在 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.';
}
当我在 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.';
}