将NULL从PHP传递到MySQL以实现自动增量

将NULL从PHP传递到MySQL以实现自动增量,php,mysql,mysqli,Php,Mysql,Mysqli,所以我在MySQL中设置了一个数据库,有三列。第一列是“idnum”,它自动递增用户id号。第二个和第三个分别是名字和姓氏。我的问题是,当我通过PHP文件中的查询字符串将名称发送到DB时,返回了两个不同的错误 当我发送查询时: $sql = "insert into namesdb values('NULL', 'firstname', 'lastname')"; $result = $db->query($sql); 我返回此错误:“第1行的列'idnum'的整数值'NULL'不正确。

所以我在MySQL中设置了一个数据库,有三列。第一列是“idnum”,它自动递增用户id号。第二个和第三个分别是名字和姓氏。我的问题是,当我通过PHP文件中的查询字符串将名称发送到DB时,返回了两个不同的错误

当我发送查询时:

$sql = "insert into namesdb values('NULL', 'firstname', 'lastname')";
$result = $db->query($sql);
我返回此错误:“第1行的列'idnum'的整数值'NULL'不正确。”因为列1是INT类型

但当我发送此查询时:

$sql = "insert into namesdb values(".NULL.", 'firstname', 'lastname')";
$result = $db->query($sql);
我得到一个语法错误

知道我到底做错了什么吗

谢谢你的帮助

应该是:

$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
$result = $db->query($sql);
'NULL'
是一个由
“NULL”
组成的字符串

尽管另一个选项(我会选择)是显式列出列:

INSERT INTO namesdb (firstname, lastname) VALUES ('firstname', 'lastname')
我更喜欢列出这些列,因为它更能证明未来,而且更容易看到发生了什么。想象一下,如果列在将来被重新排列、添加或删除。如果您必须到处删除第6个未命名参数(例如),那么突然修复查询将是一件非常痛苦的事情。

它应该是:

$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
$result = $db->query($sql);
'NULL'
是一个由
“NULL”
组成的字符串

尽管另一个选项(我会选择)是显式列出列:

INSERT INTO namesdb (firstname, lastname) VALUES ('firstname', 'lastname')

我更喜欢列出这些列,因为它更能证明未来,而且更容易看到发生了什么。想象一下,如果列在将来被重新排列、添加或删除。如果您必须在所有地方删除第6个未命名参数(例如),那么突然修复查询将是一件非常痛苦的事情。

最好指定要插入的字段名,而不要指定id字段


它将自动增加您的id字段

最好指定要插入的字段名,而不要指定id字段


它将自动增加您的id字段

您可以通过这种方式编写查询以避免该问题

 $sql = "INSERT INTO table_name SET column_name_1 = 'value_1', column_name_2 = 'value_2'";

您可以用这种方式编写查询以避免该问题

 $sql = "INSERT INTO table_name SET column_name_1 = 'value_1', column_name_2 = 'value_2'";
在上面的查询中,“NULL”是一个字符串对象,而您的列是一个整数,因此会出现错误

$sql = "insert into namesdb values(".NULL.", 'firstname', 'lastname')";
在这个查询中,您发送的是php NULL值,因此最终的查询如下所示

"insert into namesdb values(, 'firstname', 'lastname')";
所以它是无效的

正确的插入方式应如下所示

$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
$sql = "insert into namesdb values('firstname', 'lastname')";
还是像这样

$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
$sql = "insert into namesdb values('firstname', 'lastname')";
上述查询之所以有效,是因为自动递增

在上面的查询中,“NULL”是一个字符串对象,而您的列是一个整数,因此会出现错误

$sql = "insert into namesdb values(".NULL.", 'firstname', 'lastname')";
在这个查询中,您发送的是php NULL值,因此最终的查询如下所示

"insert into namesdb values(, 'firstname', 'lastname')";
所以它是无效的

正确的插入方式应如下所示

$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
$sql = "insert into namesdb values('firstname', 'lastname')";
还是像这样

$sql = "insert into namesdb values(NULL, 'firstname', 'lastname')";
$sql = "insert into namesdb values('firstname', 'lastname')";

上面的查询之所以有效是因为自动递增。

您只是试图不为idnum插入值,对吗?如果是这样的话,请看一下科尔宾回答的后半部分。您只是试图不为idnum插入一个值,对吗?如果是这样的话,看看科尔宾回答的后半部分。啊。。。我懂了。非常感谢你@马特·怀特黑德:你应该把这个答案标记为你接受的答案(假设你已经决定使用它并且它有效)。。。我懂了。非常感谢你@MattWhitehead您应该将此答案标记为您已接受的答案(假设您已决定使用它并且它有效)。感谢您的帮助,我非常感谢。感谢您的帮助,我非常感谢。出于好奇,PHP NULL和MySQL NULL之间有什么区别?用另一种语言来说,什么都不是什么都不是吗?无论如何,谢谢你的帮助。我已经添加了解释。是的,但在本例中,php解析sql字符串,最后发送到mysql的sql是错误的。出于好奇,php NULL和mysql NULL之间有什么区别?用另一种语言来说,什么都不是什么都不是吗?无论如何,谢谢你的帮助。我已经添加了解释。是的,但在本例中,php解析sql字符串,最后发送到mysql的sql是错误的。