我正在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)
有任何想法吗?
为了知道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)
快乐编码:)