0

PHP PDO を使用して、失敗した UPDATE と正常に実行されたがフィールドを既存の値に設定した UPDATE の違いを区別する方法はありますか?

$sql = 'UPDATE table SET column = :column WHERE id = :id';
$statement = $db->prepare($sql);
$statement->bindParam(':column', $column, PDO::PARAM_STR);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$RowsUpdated = $statement->rowCount();
echo '$RowsUpdated = '.$RowsUpdated.'<br />';

上記のコードは、$column の値が新しい値の場合は $RowsUpdated を 1 に設定し、既存の値と同じ場合は 0 に設定します。SQL ステートメントを変更して強制的にエラーを発生させようとしましたが、数値以外の値 (NULL や False など) を返すことはなく、0 未満になることもありません。

行を COUNT(*) で SELECT すると、fetchColumn() は行があればその数を返し、行がなければ 0 を返し、エラーがあればそれ以外を返します。したがって、($countRowsSelected > 0) を使用して行を検出し、($countRowsSelected === "0") を使用して行を検出せず、ELSE を使用してエラーを検出することができます。

UPDATEでこれを行うことは可能ですか? 更新に加えて、保存された値が変更された場合にのみ二次アクションをトリガーしたいので、これが必要です:

if ($RowsUpdated > 0) {
    // We go a NEW value, let's do a little dance
} else if ($RowsUpdated === "0") {
    // It saved, but the value was unchanged
} else {
    // Error!
}

PDO::MYSQL_ATTR_FOUND_ROWS => true を PDO に追加しようとしましたが、これにより、値が変更されたかどうかに関係なく、rowCount() が 1 を返すため、役に立ちませんでした。

4

1 に答える 1

0

次のいずれかを実行できます。

  1. PDO::errCode()それぞれを使用PDOStatement::errorCode()して、SQL エラーが発生したかどうかを確認します。または
  2. PDO::ATTR_ERRMODEに設定してデータベース接続を初期化しますPDO::ERRMODE_EXCEPTION(マニュアルを参照)。このようにして、PDO はキャッチできる例外をスローします。
于 2013-01-28T19:22:45.583 に答える