Как проверить, обновлена ​​ли строка? - PullRequest
22 голосов
/ 11 октября 2011

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

Пример:

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 ]

41 голосов
/ 11 октября 2011

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

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;
1 голос
/ 12 октября 2011

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

Что-то вроде (не проверено):

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...