用于删除不存在的行的PDO异常

时间:2015-06-15 15:59:09

标签: php sql pdo

在我的表格中

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

我如何通过PHPSQL设法阻止此问题。 因为在我的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
      }

你理解我的意思?或者没有首先没有自定义检查的方式?

2 个答案:

答案 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
}