我使用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());
}
但是这总是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";}
}
有什么想法吗?
答案 0 :(得分:5)
为了知道在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.
快乐编码:)
答案 1 :(得分:4)
如果您使用PDO,则需要rowCount方法。 如果是mysqli,您需要affected rows
答案 2 :(得分:1)
一个简单的技巧是检查受影响的行数
netInterface
.postRequest(requestData)
.repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> observable) {
requestData.setFreeMemory(x);
return observable.just(reqeustData).delay(5, TimeUnit.SECONDS);
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.subscribe(this.requestSubscriber);
还有另一个答案,更详细地说明了这一点:What does a successful MySQL DELETE return? How to check if DELETE was successful?
答案 3 :(得分:0)
你可以试试这样的事情:
if($stmt[0]->rowCount() > 0)
{
echo "success";
}
else{
echo "failure";
}