Подтвердить что ты не робот

Как проверить, обновлена ​​ли строка?

Как вернуть логическое значение, если запись была обновлена ​​в базе данных?

Пример:

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

Ответ 1

Вы можете использовать:

PDOStatement:: rowCount() возвращает количество строк, затронутых последним оператором DELETE, INSERT или UPDATE, выполняемым соответствующим объектом PDOStatement.

Если последний оператор SQL, выполняемый связанным PDOStatement, был оператором SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. Однако это поведение не гарантируется для всех баз данных и не должно полагаться на переносные приложения.

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

В ваш конкретный случай, возвращая логическое значение:

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

Ответ 2

Если что-то пошло не так, но ваш код был обновлен в базе данных, это звучит как действительно опасное состояние. Вероятно, лучше использовать транзакцию и откат для исключения.

Что-то вроде (untested):

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