自动递增失败

bogh5gae  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(339)

我有两张类似的table。一个具有自动增量值,另一个没有。第一个表的第一列定义为 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。

fnx2tebb

fnx2tebb1#

如果我读对了,第一个表有一个int(11)和 AUTO_INCREMENT .
这意味着您应该使用与表2中类似的查询。因为只有两个非自动增量字段的传入值。

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

只要有3个字段,第一个是auto inc int,另外两个是字符串,这就可以工作。这是因为auto inc自动处理第一列。
另外,为了安全起见,请查看此链接或搜索php-mysql predated语句以使用prepared语句。它将帮助您抵御sql注入。

w8f9ii69

w8f9ii692#

大概是你的 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 列。一般来说,显式地指定插入值或从中选择值的列总是很有价值的。它使代码更易于阅读/支持,并减少了表定义稍有变化时出现错误/错误的可能性。

相关问题