0

ここで問題が発生しています。2時間のグーグルStackoverflowの回答とさまざまなアイデアのテストの後、私はそれを理解できません。うまくいけば、それはそこにいる誰かにとって簡単です。

編集:修正されました!以下の解決策を参照してください。

これが私のコードです:

// Establish Table and vars
mysql_query("CREATE TABLE IF NOT EXISTS pages(page varchar(255), content varchar(255))");
$page = 'Hello'; $content = 'This is the content.';

// Ive tried this:
mysql_query("INSERT INTO pages SET page='$page' ON DUPLICATE KEY UPDATE content='$content'");

// Ive also tried:
mysql_query("INSERT IGNORE INTO pages SET page='$page', content='$content'"));
mysql_query("INSERT IGNORE INTO pages SET page='$page'")); // No content

期待される結果:「Hello」の「page」値(「This is thecontent。」の「content」値)で1つの行を作成します。スクリプトを2回実行しても、「ページ」の値が「こんにちは」の行がすでに存在するため、追加の行は作成されません。

観察された結果:スクリプトが実行されるたびに、ページ値が「Hello」の新しい行が作成されます。これは、重複キーではないためと考えられます。なぜ購入しませんか?AUTO_INCREMENTであるIDフィールドと主キーを持つテーブルを作成しようとしましたが、それが問題の原因であると考えたので、単純化しました。

(そのコードは:)

mysql_query("CREATE TABLE IF NOT EXISTS pages(id INT AUTO_INCREMENT NOT NULL, page varchar(255), content varchar(255), primary key (id))");

望ましい結果:「Hello」の「page」フィールドを持つ行がない場合は、新しい行をテーブルに挿入する必要があります。これが作成されたら、同じスクリプトを再度実行しても、新しい行が作成されることはありません。

ありがとうございました!

編集:修正されました!以下の解決策を参照してください。

私の解決策:

// Table needs a primary key to search for duplicates.
    mysql_query("CREATE TABLE IF NOT EXISTS pages(page varchar(255), content varchar(255), primary key (page))"); // Establish Table
4

2 に答える 2

2

クエリが言うように...重複したKEYで。これは、挿入がテーブルの一意性制約に違反する場合にのみトリガーされます。キーがない場合、DBはテーブル全体をスキャンして重複があるかどうかを確認しません。

于 2012-10-13T19:17:28.333 に答える
2

ON DUPLICATE pageKEY UPDATEを機能させるには、フィールドがPRIMARY KEYであるか、UNIQUEインデックスが付いている必要があります。試す:

CREATE TABLE IF NOT EXISTS pages(page varchar(255), content varchar(255), primary key (page))
于 2012-10-13T19:16:43.957 に答える