我有一个在aws RDS(Live env)上运行的mysql插入查询,但在我的local(local env)上抛出错误。 在本地我正在使用mysql V-5.6
$sql = "INSERT INTO `users` (`id`,
`name`,
`email`,
`pass`)
values('','omi','omi@gmail.com','123123')
id不为null和auto_increment。 我在本地遇到的错误是“错误的整数值:”对于第1行的“ id”列 但是,当在实时环境中执行此操作时,所有数据都会插入表中。 我不明白这里到底发生了什么。请帮忙。谢谢。 用户表的DDL。 本地
CREATE TABLE `users`
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(256) DEFAULT '',
`email` varchar(256) NOT NULL,
`pass` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25986 DEFAULT CHARSET=utf8;
实时
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(254) DEFAULT '',
`email` varchar(256) NOT NULL,
`pass` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26046 DEFAULT CHARSET=utf8;
答案 0 :(得分:1)
我认为这些引号('')是错误的。当您要使用auto_increment字段进行插入时,必须在auto_increment字段位置使用null作为参数。 看看是否可行:
$sql = "INSERT INTO `users`
(`id`, `name`, `email`, `pass`)
values(null,'omi','omi@gmail.com','123123');
编辑1
使用null不会产生任何错误,因为DBMS在内部准备接收此类参数。它知道生成下一个序列号是它的职责,如果没有,则首先插入0(在您的情况下为整数类型)。我知道在字段的DDL中定义“非null”,然后在DML插入语句中为该确切字段使用“ null”可能会造成混淆,但这只是使用auto_increment功能的正确方法。
如果将该列声明为NOT NULL,则还可以将NULL分配给该列以生成序列号。
此外,如果在语句中使用空字符串作为参数不会产生任何错误,则可能是因为RDS接口具有将空值转换为空值的内部函数。类似于MySQL中的nullif函数。
答案 1 :(得分:0)
您不能那样做。甚至不提'id'或给它提供空值。
$sql = "INSERT INTO `users` (
`name`,
`email`,
`pass`)
values('omi','omi@gmail.com','123123')
OR:
$sql = "INSERT INTO `users` (`id`,
`name`,
`email`,
`pass`)
values('NULL','omi','omi@gmail.com','123123')