Php 如何检查行是否已更新?

Php 如何检查行是否已更新?,php,mysql,pdo,Php,Mysql,Pdo,如果数据库中的记录已更新,如何返回布尔值 例子: 您可以使用: PDOStatement::rowCount()返回受相应PDOStatement对象执行的最后一个DELETE、INSERT或UPDATE语句影响的行数 如果关联的PDO语句执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都能保证这种行为,便携式应用程序也不应依赖这种行为 (PHP5>=5.1.0,PECL pdo>=0.1.0) 对于特定情况,返回布尔值: 如果出现了问题,

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

例子: 您可以使用: PDOStatement::rowCount()返回受相应PDOStatement对象执行的最后一个DELETE、INSERT或UPDATE语句影响的行数

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

(PHP5>=5.1.0,PECL pdo>=0.1.0)

对于特定情况,返回布尔值:
如果出现了问题,但是数据库中的代码被更新了,这听起来像是一种非常不稳定的状态。使用事务并在异常时回滚可能更好

类似于(未经测试):


另外,您可能不想将JSON与此代码混合,将其分离出来,让类外的东西处理JSON。

所说的“更新”是指您的update语句成功了,还是您正在寻找更新之前
valid
不是0的情况?“把它分开,让你的类之外的东西处理JSON。“怎么办?问题是检查是否有更新的行,这意味着如果查询执行得很好,但没有行被更新,那么代码将返回true,关键是必须进行更改made@zardilior所问的问题不清楚它想要什么意思。我猜了一个方向,其他人猜了另一个方向;事实证明我是错的,是的。我相信问题是清楚的,选择的答案是清楚的。所以。。。你想要什么,@zardilior?我想补充一点,如果发生了实际的更改,它将返回true,但如果行已经完全符合你更新它的方式,它将返回false。这听起来可能合乎逻辑,但如果您想使用此功能检查更新的where条件下是否存在行,则不能使用此功能。@Arie这是一个公平的观点,但您可能应该使用类似
SELECT 1 FROM tbl where…
的方法来确定是否存在记录;MySQL只返回由
UPDATE
查询实际更改的行数。如果数据未更改,则未更改任何内容,并返回零。但是如果使用
INSERT。。。在重复密钥更新…
中,如果没有任何更改,则应返回0行计数;如果是新记录(插入),则返回1行计数;如果是已更新的现有记录,则返回2行计数。清除此记录很好。我有时使用
UPDATE
查询,例如
WHERE user\u id=?id=?
,因此您可以让MySQL检查是否有人正在更新自己的记录,或者该记录是否属于其他用户。然后是另一个查询,继续查询
UPDATE
WHERE
条件的结果。如果它在本例中也返回true,我会希望它,这样我就不必进行额外的
SELECT
查询。
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;
}
return $query->rowCount() ? true : false;
$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;
}