如何检查行是否已更新?

时间:2011-10-11 19:08:51

标签: php mysql pdo

如果数据库上的记录已更新,如何返回布尔值?

实施例

try {
  $SQL = "UPDATE addressbook SET valid = '0' WHERE id = :id";
  $query = $this->db->prepare($SQL);
  $query->bindValue(":id", $id);
  $query->execute();

  //How do I know if record has been updated? 
} catch (PDOException $e) {
  $j['success'] = 'false';
  echo json_encode($j);
  return;
}

2 个答案:

答案 0 :(得分:41)

您可以使用:

  

PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

     

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序。

PDOStatement::rowCount (PHP 5> = 5.1.0,PECL pdo> = 0.1.0)

对于您的特定情况,返回布尔值:

return $query->rowCount() ? true : false;

答案 1 :(得分:1)

如果出现问题但你的代码在数据库中更新了,那听起来就像是一个非常不稳定的状态。在异常时使用事务和回滚可能更好。

像(未经测试)的东西:

$this->db->beginTransaction();
try {
       $SQL = "UPDATE addressbook SET valid = '0' WHERE id = :id";
      $query = $this->db->prepare($SQL);
      $query->bindValue(":id", $id);
      $query->execute();

      $this->db->commit();

      return true;

      //How do I know if record has been updated? 
} catch (PDOException $e) {
      $this->db->rollback();
      return false;
}

此外,您可能不希望将JSON与此代码混合在一起,将其分开并让您的类外部的内容处理JSON。