ID不能为空(自增)

4
我正在为我的网站使用INSERT ON DUPLICATE KEY语句。这是用于创建新闻项目的,因此我认为我可以使用相同的MySQL命令来创建和更新新闻项目。
然而,当我使用以下命令时:
INSERT INTO table (id,title,content) VALUES(NULL,"Test","Test");

当我尝试创建一个新的自增值时,它会抛出一个错误。但是,在我的主要开发服务器上,该命令可以工作,但在我的笔记本电脑上却无法正常执行。MySQL的两个版本都相同,唯一的区别是MySQL在我的服务器上是手动安装的,而在笔记本电脑上是通过WAMP安装的。

是否有任何MySQL变量可能导致此问题?


1
当您通过mysql命令行客户端输入查询时,是否会得到相同的结果? - Ja͢ck
它在控制台中运行良好。现在正在四次检查我的PHP代码,期待着我即将像个白痴一样的时刻到来。 - THEK
请发布您的PHP代码的相关摘录。您可能正在执行类似以下的操作: <?php $id = NULL; mysql_query("INSERT INTO table (id,title,content) VALUES($id,\"Test\",\"Test\""); ?> 这与以下代码不同 <?php mysql_query(..."VALUES(NULL,\"Test\",\"Test\"); ?> - RandomSeed
找到原因了。自动递增正常,问题是另一个列导致的。该表的工作方式是它们有一个唯一的ID,但它们还有一个类别ID和一个索引。索引告诉站点按每个类别的顺序显示新闻,但我尝试通过选择该类别的最高索引并添加1来进行手动递增。但是,如果该类别没有新闻,则会返回空值,我不能将该列留为空。我想我必须在我的PHP代码中手动检查并手动添加。 - THEK
@THeK 请回答您自己的答案,然后接受它。同时,请在原始问题中提供更多背景信息,以便未来的人们更好地了解发生了什么。谢谢。 - Ja͢ck
3个回答

4

我建议使用INSERT INTO table (title,content) VALUES("测试","测试");

这将在表中创建一行新的、自增的ID。


这样做是可行的,但是这意味着我在 PHP 中需要添加额外的代码来检查是否发送了一个 ID,并编写两个不同的 SQL 命令。而如果我能够只发送一个空的 ID(如果未提供),那么 SQL 就可以完成所有工作。 - THEK
1
我现在有点困惑。请回答Jack的第一个问题(即您原始帖子下的评论)。同时,提供从命令行执行INSERT INTO table (title,content) VALUES("Test","Test");的结果。 - RandomSeed

1

我尽力解决了这个问题。

我检查了我的代码,发现当我插入空的POST'd ID时,它会用引号包裹它。我现在已经更改了它,使其不带引号放置NULL。所以我的查询现在应该是:

INSERT INTO table (id,title,content) VALUES(NULL,"test","Test")
ON DUPLICATE KEY UPDATE title=VALUES(title), content=VALUES(content);

那现在工作了。


0

我认为你应该像这样编写查询:

INSERT INTO table (title,content) VALUES("Test","Test");

如果仍然无法正常工作,请检查id列是否设置为自增。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接