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

预期结果:创建一行,其 'page' 值为 'Hello'('content' 值为 'This is the content.')。当脚本第二次运行时,不会创建额外的行,因为已经有一行 'page' 值为 'Hello'。

观察到的结果:每次运行脚本时,都会创建一个页面值为“Hello”的新行,假设这不是重复键。为什么不买?我尝试创建一个 ID 字段为 AUTO_INCREMENT 和主键的表,但我认为这是导致问题的原因,所以我对其进行了简化。

(那个代码是:)

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

预期结果:如果没有“页面”字段为“Hello”的行,则应将新行插入表中。一旦这被创建,再次运行相同的脚本不应该导致一个新的行。

谢谢!

编辑:固定!请参阅下面的解决方案。

我的解决方案:

// 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

您的page字段必须是 PRIMARY KEY 或具有唯一索引才能使 ON DUPLICATE KEY UPDATE 起作用。尝试:

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

正如查询所说......在重复的KEY上。仅当插入违反表上的唯一约束时才会触发。如果没有键,数据库将不会扫描整个表以查看是否有重复。

于 2012-10-13T19:17:28.333 回答