簡単な解決策は、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: 行が更新されました
あなたのニーズに合わせてそれを作ることができますか?