2016-07-02 10 views
1

ON使用した場合、INSERTクエリはUPDATEまたはINSERTを実行した場合はUPDATEかどうかを確認するか、私はこのようになりますmysqliの/ PHPのクエリを使用していDUPLICATE KEY

$query = " 
INSERT INTO table (unique_key, column_1, column_2) 
VALUES (?,?,?) 
ON DUPLICATE KEY UPDATE 
value_1 = ?, value_2 = ?"; 
if ($statement = $mysqli->prepare($query)) 
{ 
    $statement->bind_param("iiiii", $unique_key, $value_1, $value_2, $value_1, $value_2); 
    $statement->execute(); 
    $statement->close(); 
} 

は、どのように私は言うのですか?

+0

DUPLICATE KEY UPDATE ON変更この COLUMN_1 =、COLUMN_2 = "; – JYoThI

答えて

7

mysqli_affected_rowsを使用して戻り値を確認できます。 MySQL docsから既存の行が設定されている場合

INSERT ... ON DUPLICATE KEY UPDATEステートメントの場合、行ごとの影響を受け、行 値は、既存の行が更新された場合、行は新しい行、2として挿入された場合に1であり、0現在の値の に設定します。

1

INSERTとUPDATEの違いは、ユニークキーです。一意のキーをたくさん定義することができます。あるキーに重複がある場合、UPDATEに移動します。

あなたはウィッヒあなたに重複キーエラーに対するエラーON DUPLICATEがサンプル

テーブル

MariaDB [yourschema]> show create table dup; 

+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Table | Create Table                                    | 
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| dup | CREATE TABLE `dup` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `a` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.02 sec) 

ここ

の作品を与える「のINSERT INTO "ノーマル" を持っている場合1行挿入

MariaDB [yourschema]> insert into dup (id,a) VALUES(1,5); 
Query OK, 1 row affected (0.04 sec) 

* ON DUPLICATE KEY

MariaDB [yourschema]> insert into dup (id,a) VALUES(1,5) ON DUPLICATE KEY UPDATE a=a+VALUES(a); 
Query OK, 2 rows affected (0.01 sec) 

とINSERT再び同じ挿入=エラー

MariaDB [yourschema]> insert into dup (id,a) VALUES(1,5); 
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' 
MariaDB [yourschema]> 

MariaDB [yourschema]> select * from dup; 
+----+------+ 
| id | a | 
+----+------+ 
| 1 | 5 | 
+----+------+ 
1 row in set (0.01 sec) 

**テーブルを参照し、再度テーブルを参照してください - フィールドaを追加します

MariaDB [yourschema]> select * from dup; 
+----+------+ 
| id | a | 
+----+------+ 
| 1 | 10 | 
+----+------+ 
1 row in set (0.01 sec) 

MariaDB [yourschema]> 

USAGE

DUPLICATE KEY ON INSERT INTOの正しい使い方は....です:

INSERT INTO table (unique_key, column_1, column_2) 
VALUES (?,?,?) 
ON DUPLICATE KEY UPDATE 
value_1 = VALUES(column_1), value_2 = VALUES(column_2)"; 

あなただけ挿入するために準備し、そのことが可能のため3引数を使用します行数を増やす

INSERT INTO table (unique_key, column_1, column_2) 
VALUES (?,?,?),(?,?,?) 
ON DUPLICATE KEY UPDATE 
value_1 = VALUES(column_1), value_2 = VALUES(column_2)"; 
+0

良い点だが質問に答えていない – revo

+0

@revoを - 私は私の答え –

+0

中のAAサンプルを持っているけれども、それは答えません?。質問! – revo

0

私はこの1つを自分自身で解決したようです:

$flag = $statement->insert_id; 

$flag > 0の場合、それは挿入物でした。さもなければ、それは更新でした。

よろしくお願いします...

関連する問題