我有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。
答案 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
列。总的来说,几乎总是值得明确指定要在其中插入值或从中选择值的列。如果表定义稍有变化,它可使代码更易于阅读/支持,并减少发生错误/错误的机会。