web-dev-qa-db-ja.com

行が更新されているかどうかを確認するにはどうすればよいですか?

データベースでレコードが更新された場合にブール値を返す方法は?

例:

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;
}
22
I'll-Be-Back

次を使用できます。

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;
42
CD001

何かがうまくいかなかったが、データベースでコードが更新された場合、それは本当に不安定な状態のように聞こえます。例外でトランザクションとロールバックを使用する方がおそらく良いでしょう。

(未テスト)のようなもの:

$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を処理することはおそらく望ましくありません。

1
Levi Morrison