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

beg*_*ner 4 php mysql pdo

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

function delete(){
    $stmt = $this->db->prepare("DELETE FROM users WHERE id= :id");
    $stmt->bindValue(':id',$_POST[id]);

    var_dump($stmt->execute());
}
Run Code Online (Sandbox Code Playgroud)

但这总是给出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";}
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

小智 6

如果使用的是PDO,则需要rowCount方法。如果是mysqli,则需要受影响的行


Nar*_*r P 5

说明

为了知道GET THE ROW COUNT在执行代码之后,在select和Delete期间最后一次操作影响了多少行.

条件:

  • 如果计数大于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");
?>
Run Code Online (Sandbox Code Playgroud)

样本输出:

Return number of rows that were deleted:
Deleted 9 rows.
Run Code Online (Sandbox Code Playgroud)

快乐编码:)