我将我的 php 版本从 7.1 升级到 7.2。
在我的 phpmyadmin 中,我有一张这样的表:
CREATE TABLE `images` (
`image_id` int(11) NOT NULL,
`image_name` varchar(255) CHARACTER SET utf8 NOT NULL,
`image_title` varchar(255) CHARACTER SET utf8 NOT NULL ,
`image_alternative` varchar(255) CHARACTER SET utf8 NOT NULL ,
`image_folder` varchar(255) CHARACTER SET utf8 NOT NULL ,
`image_status` int(11) NOT NULL ,
`date` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
image_id 是唯一必填字段。其余的都是可选的,可以为空。 当我尝试插入记录时:
INSERT INTO `images`(`image_name`,`image_status`) VALUES ("new image",1);
我收到此错误
MySQL said: Documentation #1364 - Field 'image_title' doesn't have a default value
为了解决此问题,我必须在表中为所有字段添加预定义值,或者在查询中添加所有字段(即使它们为空)。
INSERT INTO `images`(`image_name`, `image_title`, `image_alternative`, `image_folder`, `image_status`)
VALUES ("new image,"","","",0)
我知道 php 7.x 比旧版本更安全,并且他们正在努力随着时间的推移变得更好。但是如何解决这个问题而不需要更改我的所有表或查询。谢谢您
最佳答案
为了便于将来引用,请记住以下一些提示:
- 要使列成为可选列,只需将
NOT
关键字替换为DEFAULT
关键字即可。请记住:“默认空”是可选的。 “Not Null”为必填项。 image_id
列应该是AUTO_INCRMENT
字段。只要image_id
列名称及其值未显式插入到查询中,添加它即可防止INSERT INTO ...
SQL 语句失败。 (OP 中的两个INSERT INTO
查询都缺少这些项目。)image_id
列也是该表的PRIMARY KEY
。应该加上这个。
经过这些简单的编辑后,表格应如下所示:
CREATE TABLE `images` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`image_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`image_title` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`image_alternative` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`image_folder` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`image_status` int(11) DEFAULT NULL,
`date` datetime DEFAULT current_timestamp(),
PRIMARY KEY (`image_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
关于php 7.2 正在阻止插入记录而不添加所有表的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756844/