如何检查行是否已更新?

2022-08-30 19:05:05

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

例:

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;
}

答案 1

您可以使用:

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;

答案 2

如果出现问题,但您的代码在数据库中进行了更新,这听起来像是一个非常不稳定的状态。最好使用事务并在异常时回滚。

类似的东西(未经测试):

$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。


推荐