2

PHP から SQL (MySQL) コマンドを実行しています。各実行には、いくつかの可能な結果があります。

  1. 新しい値に更新されたレコード
  2. レコードが更新されましたが、値がたまたま同じです
  3. 更新する行がレコードにない (つまり、WHERE句に一致する行がない)

# の 1 と 3 を区別する方法を考えています。どちらの場合も、影響を受ける行の数としてゼロを返すため、次のようになります。

$result = $db->exec($statement)

$result == 0どちらの場合にもあります。どうすれば違いがわかりますか?

編集:シナリオ 1 と 3 ではなく、シナリオ 2 と 3 を区別する方法を尋ねるつもりでした! ご不便おかけしてすみません...

4

1 に答える 1

1

簡単な解決策は、2 つのクエリです。

まず、SELECT クエリを実行して、mysqli_num_rows() を使用して行が存在するかどうかを確認します。

次に、行が存在する場合は、UPDATE クエリを実行し、mysqli_affected_rows() を使用できます。


[編集]

...単一の呼び出しを探している人に、代替案を提案します。INSERT を行うことに興味があるのか​​、それとも純粋に UPDATE を行うことに興味があるのか​​はわかりません。以下に考察の材料を示します。

トップコメント @ http://php.net/manual/en/mysqli.affected-rows.phpから:

「INSERT INTO ON DUPLICATE KEY UPDATE」クエリでは、クエリが成功した場合に、affected_rows が行ごとに 0 または 1 のみを返すと予想される場合がありますが、実際には 2 が返される場合があります。

Mysql マニュアルから: 「ON DUPLICATE KEY UPDATE では、行が新しい行として挿入された場合、行ごとの影響を受ける行の値は 1 であり、既存の行が更新された場合は 2 です。」

参照: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

行ごとの合計内訳は次のとおりです。

+0: 行は更新または挿入されませんでした (行が既に存在していた可能性がありますが、UPDATE 中にフィールド値が実際に変更されていない可能性があります)。

+1: 行が挿入されました

+2: 行が更新されました

あなたのニーズに合わせてそれを作ることができますか?

于 2015-04-22T03:15:01.063 に答える