在我的表格中
id |name
1 | one
然后
$id = '2';
$sql=$this-con->query("delete from aTable WHERE id = '".$id."' " );
该行将以
执行/* Affected rows: 0 Found rows: 0 Warnings: 0 Duration for 1 query: 0.000 sec. */
即使表格中没有这样的身份2
。
我如何通过PHP
或SQL
设法阻止此问题。
因为在我的PHP中,我需要告诉用户没有这样的行,但是如何在不通过自定义代码检查它的情况下捕获该丢失的行。因为:
if($sql){
// Tell user the row is deleted, but (in fact there is no such row with the id in the column)
}
else{
// there must be exception goes here
}
你理解我的意思?或者没有首先没有自定义检查的方式?
答案 0 :(得分:2)
PDO::exec()
返回您发出的SQL语句修改或删除的行数。如果没有行受到影响,PDO::exec()
将返回0.
试试这个:
$ nrows = $ this-con>查询(“从aTable WHERE id =删除 “ '”。$ ID。 “'”) - > fetchColumn();
答案 1 :(得分:2)
你在PHP中使用PDO还是纯MySQL函数?
使用PDO,您可以使用预准备语句,然后像这样获取rowCount:
$st = $conn->prepare("delete from aTable WHERE id = '".$id."' " );
$st->execute();
if($st->rowCount()) {
// return the number of affected rows: Record deleted
} else {
// no such record in the database
}
如果您使用纯MySQL函数(并且您真的不应该使用它们),那么请使用mysql_affected_rows():
$result = mysql_query("delete from aTable WHERE id = '".$id."' ");
if(mysql_affected_rows()) {
// record found and deleted
} else {
// no such record in the database
}