如何知道DELETE查询是否真的删除了一行,使用PDO


How to know if the DELETE query really deletes a row ,using PDO

我正在使用PDO语句传递DELETE查询到mysql。我想知道,查询是否真的删除了一行?我尝试使用$stmt->execute()

的返回值
function delete(){
    $stmt = $this->db->prepare("DELETE FROM users WHERE id= :id");
    $stmt->bindValue(':id',$_POST[id]);
    var_dump($stmt->execute());
}

但这总是给出true,即使没有删除行。即使我不发送任何值,它也会为真,甚至一次又一次地发送相同的值。可能是因为查询成功,删除了0行,所以$stmt->execute()的返回值没有帮助。

那么在PDO中是否有其他方法可以知道是否真的删除了任何一行,更具体地说,我想确保只有一行被删除。

所以我想要这样写

function delete(){
    $stmt = $this->db->prepare("DELETE FROM users WHERE id= :id");
    $stmt->bindValue(':id',$_POST[id]);
    $stmt->execute();
    if($rowdeleted == 1){ echo "success";}
    else{echo "failure";}
}

任何想法?

说明

为了知道在select和Delete的最后一次操作中有多少行受到了影响,您必须在执行代码后单击GET THE ROW COUNT

条件:

  • 如果计数大于0 -这意味着代码已经影响了一些操作。
  • 如果计数返回值不大于0,则表示WHERE子句中没有需要匹配的记录。

例子

PDOStatement::rowCount -返回受最后一条SQL语句影响的行数

PDOStatement::rowCount()返回由对应的PDOStatement对象执行的最后一个DELETE、INSERT或UPDATE语句所影响的行数。

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,一些数据库可能会返回该语句返回的行数。然而,这种行为并不能保证适用于所有数据库,也不应该依赖于可移植应用程序。

示例代码:

<?php
/* Delete all rows from the FRUIT table */
$del = $dbh->prepare('DELETE FROM fruit');
$del->execute();
/* Return number of rows that were deleted */
print("Return number of rows that were deleted:'n");
$count = $del->rowCount();
print("Deleted $count rows.'n");
?>
样本输出:

Return number of rows that were deleted:
Deleted 9 rows.

Happy Coding:)

如果您使用PDO,那么您需要rowCount方法。对于mysqli,您需要受影响的行

你可以尝试这样做:

if($stmt[0]->rowCount() > 0)
{ 
echo "success";
}
else{
echo "failure";
}

一个简单的技巧是检查受影响的行数

$count = $stmt->rowCount();