我正在使用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();