自动增量失败

时间:2018-12-11 10:52:29

标签: php mysql mysqli

我有2个类似的表格。一个带有自动增量值,另一个没有。第一表的第一列定义为INT(11), PRIMARY UNIQUE INDEX,在phpmyadmin的EXTRA下,它表示AUTO_INCREMENT

此代码无效,并且不添加任何值。

mysqli_query($con, "INSERT INTO testtable1 VALUES ('', 'zzz', 'yyy')") ;

第二个表是与第一列相同的表。此代码有效。

mysqli_query($con, "INSERT INTO testtable2 VALUES ('jjj', 'fff')") ;

知道我缺少什么吗?在数据库上运行7.2。

2 个答案:

答案 0 :(得分:1)

如果我正确地阅读了此内容,则第一个表具有带有AUTO_INCREMENT的int(11)。

这意味着您应该使用与表2类似的查询。因为仅传递两个非自动增量字段的值。

mysqli_query($con, "INSERT INTO testtable1 VALUES ('zzz', 'yyy')") ;

只要有3个字段,这将起作用,第一个是auto inc int,另外两个是字符串。这是因为auto inc自动处理第一列。

此外,请出于安全考虑,请查看此link或搜索php MySQL预先声明的语句,以使用准备好的语句。它将帮助您防止sql注入。

答案 1 :(得分:1)

大概您的testtable1的定义与(伪符号)相当类似:

testtable1
------------
ID             INT      PK AUTOINCREMENT
SomeColumn     NVARCHAR
AnotherColumn  NVARCHAR

因此,当您这样做时:

INSERT INTO testtable1 VALUES ('', 'zzz', 'yyy')

您要明确告诉数据库在INT列中插入一个空字符串。哪个行不通。

不需要通知AUTOINCREMENT列为空值,它会自动递增。只需指定要插入的值即可:

INSERT INTO testtable1 (SomeColumn, AnotherColumn) VALUES ('zzz', 'yyy')

让数据库引擎处理ID列。总的来说,几乎总是值得明确指定要在其中插入值或从中选择值的列。如果表定义稍有变化,它可使代码更易于阅读/支持,并减少发生错误/错误的机会。