のMySQLとは異なりますするmysql_query()の挙動は、私は次の表を持って、コマンドラインで
INSERT INTO db.insert_test (closed, user, level, comment, count) VALUES (0, 1, 50, 'First insert', 1) ON DUPLICATE KEY UPDATE comment=VALUES(comment), count=count+1;
INSERT INTO db.insert_test (closed, user, level, comment, count) VALUES (0, 1, 75, 'Second insert', 1) ON DUPLICATE KEY UPDATE comment=VALUES(comment), count=count+1;
...これがあります出力は、私が取得:
+----+--------+------+-------+---------------+-------+
| id | closed | user | level | comment | count |
+----+--------+------+-------+---------------+-------+
| 9 | 0 | 1 | 50 | First insert | 1 |
| 10 | 0 | 1 | 75 | Second insert | 1 |
+----+--------+------+-------+---------------+-------+
私はmysql_query()
を使用してこれらのコマンドを実行すると、これは私が得るものです。
+----+--------+------+-------+---------------+-------+
| id | closed | user | level | comment | count |
+----+--------+------+-------+---------------+-------+
| 11 | 0 | 1 | 50 | Second insert | 2 |
+----+--------+------+-------+---------------+-------+
ので、クエリが更新の代わりに、私はmysql_query()
機能を使用する場合、それはすべきではないときに、2つのインサートが異なるレベルを持っているので、彼らは一意であるため、右...、新しい行を挿入していますか?間違っているのですか、ここに何か起こっていますか?
編集:私はそれは使い正確にコードスニペット:
char* query = "INSERT INTO db.insert_test (closed, user, level, comment, count) VALUES (0, 1, 50, 'First insert', 1) ON DUPLICATE KEY UPDATE comment=VALUES(comment), count=count+1;";
char* query2 = "INSERT INTO db.insert_test (closed, user, level, comment, count) VALUES (0, 1, 75, 'Second insert', 1) ON DUPLICATE KEY UPDATE comment=VALUES(comment), count=count+1;";
mysql_query(link, query);
mysql_query(link, query2);
私はリンクが正しく、それが仕事をしているため、このコードは以外(つまり、クエリが実行されている)で実行されていることを知っています挿入するのではなく更新する箇所を発行してください。
mysql_query()を実行する場所でコードスニペットを共有できますか? – dchayka
**警告**:PHPを学んでいるだけの方は、[mysql_query'](http://php.net/manual/en/function.mysql-query.php)インタフェースを使用しないでください。それはPHP 7で削除されたのでとてもひどいと危険です。[PDOのようなものは学ぶのが難しくない](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps -pdo-for-database-access /)と[PHP The Right Way](http://www.phptherightway.com/)のようなガイドがベストプラクティスを説明しています。 – tadman
私は上記のコードスニペットを入れて、もっと必要な場合にお知らせください。そして、私は言及すべきでした、これはCでPHPではありません。 – user2073805