gpt4 book ai didi

php - 本地 mysql 上有错误,但 RDS mysql 上没有错误

转载 作者:行者123 更新时间:2023-11-29 10:08:41 25 4
gpt4 key购买 nike

我有一个 mysql 插入查询,它在 aws RDS(Live env) 上运行,但在我的本地(local env) 上抛出错误。在本地我使用 mysql V-5.6

$sql = "INSERT INTO `users` (`id`, 
`name`,
`email`,
`pass`)
values('','omi','omi@gmail.com','123123')

id 不为空且自动递增。我在本地收到的错误是“整数值不正确:”第 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;

最佳答案

我认为错误出在这些引号 ('') 上。当您想要使用 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 中定义“not null”,然后在该字段的 DML 插入语句中使用“null”可能看起来很困惑,但这正是使用 auto_increment 功能的正确方法。

来自documentation :

If the column is declared NOT NULL, it is also possible to assign NULL to the column to generate sequence numbers.

此外,如果在语句中使用空字符串作为参数不会生成任何错误,可能是因为 RDS 接口(interface)有一个将空字符串转换为 null 的内部函数。类似于 MySQL 中的 nullif 函数。

关于php - 本地 mysql 上有错误,但 RDS mysql 上没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com