使用 ThinkPHP 框架,mysql 报错:1364:Field xx doesn't have a default value,laravel 却没有报过

ThinkPHP框架SQL注入漏洞深度剖析与实战复现 SQL注入作为Web应用中最常见的安全漏洞之一,其原理在于攻击者通过构造恶意输入,篡改后端数据库查询语句的逻辑,从而执行非授权的数据库操作。在ThinkPHP这类流行框架中,虽然提供了参数绑定等安全机制,但若开发者未严格遵守安全规范,在动态拼接用户输入至order by、field等子句时,仍可能绕过框架的过滤,导致注入风险。这种漏洞的技术价值在于,它不仅是基础安全知识的实践,更是理解框架底层实现与安全边界的关键案例。在电商、内容管理等实际应用场景中,此类漏洞可直接导致敏感数据泄露,危害极大。本文以CRME 阅读详情

1364:Field 'sex' doesn't have a default value [ SQL语句 ]

1364:Field 'sex' doesn't have a default value [ SQL语句 ]

 

错误解决方法:

关闭MySQL的strict mode的具体做法:

找到MySQL目录下的my.ini,将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重新启动 Mysql服务

 

造成问题的原因:

一. Strict Mode的描述:

根据 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制:

1).不支持对not null字段插入null值

2).不支持对自增长字段插入''值,可插入null值

3).不支持 text 字段有默认值

eg:

1.看下面代码:(第一个字段为自增字段)

$query="insert into demo values('','$firstname','$lastname','$sex')";

上边代码只在非strict模式有效,如果是strict模式下就会出错。

 

2.$query="insert into demo values(NULL,'$firstname','$lastname','$sex')";

上边代码只在strict模式有效。把空值''换成了NULL.

 

二. 让数据库支持Strict Mode:

1.对数据库结构进行以下改进来支持strict mode:

1) 给所有not null字段都设置非null默认值,字符串默认值为 '',数值默认值为 0,日期默认值为 '0000-00-00 00:00:00'

2) 去掉text字段的默认值

3) 规范化改进: 把 title 字段统一改为 varchar(255),把有默认值的null字段改为not null字段

 

2.如果安装的PHP程序数据库结构关闭Strict mode

1).一个是安装mysql5.0(含以上)版本的时候去掉strict mode。

编辑 my.ini,关闭Strict Mode:

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

 

2). 另一个就是修改查询语句。例如在

if ($this->dbcharset) {

@mysql_query("SET NAMES ".$this->dbcharset);

}

后面执行

mysql_query("SET @@sql_mode = ''");

 

注意确定你使用的是MySQL5 以上版本

 

mysqli方式类似,就是执行的是

mysqli_query($this->connection_id, "SET @@sql_mode = ''");

 

MySQL 1364 错误提示:#1364 - Field "XX" doesn't have a default value

MySQL 1364 错误提示:#1364 - Field "details" doesn't have a default value。

大概意思是:details字段没有默认的数值;也就是说我们没有为其分配数值,而表中此字段也没有设置默认值。

这是MySQL5出来后搞出来的东东,认真看一下my.ini文件中有这样一段:

my.ini中相关代码

# Set the SQL mode to strict

# sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

假如您无法看到my.ini,你可以执行以下SQL命令。

SQL代码

SELECT @@GLOBAL.sql_mode;

您可能一下子就注意到:STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)。这也就是为什么我们插入数据时返回1364的原因:details字段没有设置默认值。

解决办法有两种:

第一种:数据库设计时,可能没有数据的字段设置默认值。

第二种:设置SQL的模式,此有两种方法:

(1),配置my.ini,去掉:STRICT_TRANS_TABLES 重新启动mysql服务

my.ini配置代码

# Set the SQL mode to strict

# sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

(2),运行SQL命令。注:此命令需要权限!

SQL代码

SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

解决方法一:

如果是直接用sql语句进行操作mysql,可加上 set sql_mode=";

即可.dedecms采集就是这么做的

解决方法二:

打开my.ini,查找

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

修改为

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启MYSQL

解决方法三:

MySQL 5 uses a strict mode which needs to be disabled.

In Windows, Goto Start–>Programs–>MySQL->MySQL Instance Config Wizard. Follow through the Reconfigure Instance option–>Detailed Configuration–>Continue Next a few screens. At the bottom under Enable TCP/IP option there is 'Enable Strict Mode'. Deslect this option (no tick). Save changes and MySQL will restart

  原来在MySQL 5.0.2之前,MySQL对非法或不当值并不严厉,而且为了数据输 入还会强制将它们变为合法值。在MySQL 5.0.2和更高版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够 拒绝并放弃出现不良值的语句。本节介绍了MySQL的默认行为(宽大行为),新的严格的SQL模式,以及它们的区别。

  如果你未使用严格模式,下述情况是真实的。如果将"不正确"的值插入到列,如将NULL值插入非NULL列,或将过大的数值插入数值列,MySQL会将这些列设置为"最可能的值",而不是生成错误信息。

  · 如果试图将超范围的值保存到数值列,MySQL服务器将保存0(最小的可能值)取而代之,或最大的可能值。

  · 对于字符串,MySQL或保存空字符串,或将字符串尽可能多的部分保存到列中。

  · 如果打算将不是以数值开头的字符串保存到数值列,MySQL将保存0。

   · MySQL允许将特定的不正确日期值保存到DATE和DATETIME列(如"2000-02-31"或"2000-02-00")。其观点在于, 验证日期不是SQL服务器的任务。如果MySQL能保存日期值并准确检索相同的值,MySQL就能按给定的值保存它。如果日期完全不正确(超出服务器能保 存的范围)将在列中保存特殊的日期值"0000-00-00"取而代之。

  · 如果试图将NULL值保存到不接受NULL值的列,对于单行 INSERT语句,将出现错误。对于多行INSERT语句或INSERT INTO … SELECT语句,MySQL服务器会保存针对列数据类型的隐含 默认值。一般情况下,对于数值类型,它是0,对于字符串类型,它是空字符串("),对于日期和时间类型是"zero"。

  · 如果INSERT语句未为列指定值,如果列定义包含明确的DEFAULT子句,MySQL将插入默认值。如果在定义中没有这类DEFAULT子句,MySQL会插入列数据类型的隐含默认值。

   采用前述规则的原因在于,在语句开始执行前,无法检查这些状况。如果在更新了数行后遇到这类问题,我们不能仅靠回滚解决,这是因为存储引擎可能不支持回 滚。中止语句并不是良好的选择,在该情况下,更新完成了"一半",这或许是最差的情况。对于本例,较好的方法是"仅可能做到最好",然后就像什么都未发生 那样继续。

  在MySQL 5.0.2和更高版本中,可以使用STRICT_TRANS_TABLES或STRICT_ALL_TABLES SQL模式,选择更严格的处理方式。

  STRICT_TRANS_TABLES的工作方式:

  · 对于事务性存储引擎,在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。

   · 对于非事务性存储引擎,如果错误出现在要插入或更新的第1行,将放弃语句。(在这种情况下,可以认为语句未改变表,就像事务表一样)。首行后出现的 错误不会导致放弃语句。取而代之的是,将调整不良数据值,并给出告警,而不是错误。换句话讲,使用STRICT_TRANS_TABLES后,错误值会导 致MySQL执行回滚操作,如果可以,所有更新到此为止。

  要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存 储引擎,它与STRICT_TRANS_TABLES等同,即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语句。这意味着,如果错误出现 在非事务性表多行插入或更新过程的中途,仅更新部分结果。前面的行将完成插入或更新,但错误出现点后面的行则不然。对于非事务性表,为了避免这种情况的发 生,可使用单行语句,或者在能接受转换警告而不是错误的情况下使用STRICT_TRANS_TABLES。要想在第1场合防止问题的出现,不要使用 MySQL来检查列的内容。最安全的方式(通常也较快)是,让应用程序负责,仅将有效值传递给数据库。

  有了严格的模式选项后,可使用INSERT IGNORE或UPDATE IGNORE而不是不带IGNORE的INSERT或UPDATE,将错误当作告警对待。

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取 新年第二篇文章,收尾一个去年计划中发表文章和实现功能。 阅读详情

相关推荐

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2928

1364:Field 'sex' doesn't have a default value [ SQL语句 ]

1364:Field 'sex' doesn't have a default value [ SQL语句 ]  错误解决方法: 关闭MySQL的strict mode的具体做法: 找到MySQL目录下的my.ini,将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改为sql-m...

weixin_33857230的博客 2196

机械臂抓取前言

机械臂相关的笔记

weixin_64037619的博客 3908

解决MySQL中“Field ‘***‘ doesn‘t have a default value”错误

doesn’t have a default value”错误。在MySQL中,如果您在插入数据时未为某个字段指定值,而该字段又没有设置默认值,就会遇到“Field ‘

weixin_47885327的博客 3319

Anolis OS 23实战:5分钟搞定AI环境配置(含NVIDIA驱动一键安装)

本文详细介绍了如何在Anolis OS 23上快速配置AI开发环境,包括NVIDIA驱动的一键安装和TensorFlow、PyTorch等AI框架的部署。通过智能硬件适配引擎和优化后的二进制包,用户可在5分钟内完成传统需要数小时的配置工作,显著提升AI项目开发效率。

weixin_30335575的博客 534

【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?

如何查看 WPS 的输入静态地理数据(二进制格式)?

WW、forever的博客 632

13-解决General error: 1364 Field ‘XXX‘ doesn‘t have a default value问题

13-解决General error: 1364 Field ‘XXX‘ doesn‘t have a default value问题

我们的目标是星辰大海! 1367

番外篇第3集:多模态运维!让 AI 看懂 Grafana 图表并自动生成巡检报告

文章摘要 《多模态运维:让AI看懂Grafana图表并自动生成巡检报告》介绍了如何利用Qwen2.5-VL多模态模型解决传统运维巡检的痛点。文章指出人工查看Grafana监控图表存在效率低、易漏判、报告编写耗时等问题,提出通过Grafana Render API和多模态AI技术实现自动化巡检方案。 主要内容包括: 环境准备:配置Qwen2.5-VL多模态模型和Grafana访问权限 测试验证:展示模型准确识别图表类型、指标数值和异常趋势的能力 技术实现:封装Grafana截图API客户端,支持面板截图和数据

qq_2937655951的博客 108

Oracle 第三节

字段约束 初识约束 约束是数据库用来确保数据满足业务规则的手段,对数据做的条件限制。 约束的类型 主键约束(PRIMARY KEY) 唯一性约束(UNIQUE) 非空约束(NOT NULL) 检查约束(CHECK) 外键约束(FOREIGN KEY) 主键约束(PRIMARY KEY) 1. 非空加唯一约束; 2. 一个表只有一个主键; 3. 主键会默认加索引; student_id number primary key alter table student add con

Rachu的博客 374

YOLOv11的元学习(MAML)few-shot适配-(5样本内快速适应新类别)

本文提出了一种基于元学习和YOLOv11的少样本目标检测方法。首先介绍了元学习的核心概念和MAML算法原理,分析了YOLOv11的架构改进及其在少样本检测中的适用性。针对少样本检测面临的过拟合、特征混淆和定位困难等挑战,提出了基于MAML的解决方案。在实现方面,详细阐述了环境配置、数据预处理和任务采样策略,构建了支持N-way K-shot任务的数据加载器。实验表明,该方法相比传统微调策略可显著提升小样本场景下的检测性能。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 599

新手必看!一步步教您如何获取可用的D音Cookie(为什么我复制的D音Cookie无法正常使用?)

新手必看!一步步教您如何获取可用的抖音Cookie(为什么我复制的抖音Cookie无法正常使用,无法下载无水印视频?)

XiaoqiangClub的博客 1491

GENERAL ERROR: 1364 FIELD

MYSQL 5.6 GENERAL ERROR: 1364 FIELD MYSQL 严格模式导致 有一天注册了一个系统,填写的时候,有些内容不详填写,就随意空着,后来再次登录失败。 mysql 5.6 General error: 1364 Field 这个错误的原因是msyql 开启了严格的模式,表内的任何字段都不允许为空,除非所有的字段全都设置了默认值否则,在插入的时候有一个字段为空...

空箱子 1669

Unity 编辑器篇|(一)MenuItem菜单栏

"一级菜单/二级菜单上/三级菜单""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""GameObject/二级菜单""CONTEXT/组件名/菜单名""一级菜单/二级菜单上 #_A""Assets/二级菜单""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""自定义/Test"

游戏开发小Y的博客 13万+

Field ‘xxxx‘ doesn‘t have a default value的解决方案

Field ’ xxx ’ doesn’t have a default value 1、在数据库的表中添加数据时,出现这样一句话。 2、其主要原因是因为mysql的中没有将主键设置为自增,所以在增加元素时获取生成主键时出现异常。 3、打开Navicat 找到增加元素时的表,将id属性设置为主键自增 4、再次输入 INSERT INTO hodr_customer (customer_id,customer_number,customer_name)VALUES (001,3001,“客户1”);

m0_56293508的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

php出现Field 'id' doesn't have a default value

1.Field ‘id’ doesn’t have a default value 如果你在做web项目的时候,出现 Field ‘id’ doesn’t have a default value 这个错误,那就什么都别管,直接找到你的数据库,找到相应的数据表,看id的自增递增是否勾选上了,如果没有勾上那就勾上,保存再次运行就好了。 ...

l_fireworks的博客 979

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SQLSTATE[HY000]: General error: 1364 Field 'xxxxx' doesn't have a default value

放在本地开发测试没问题,好好的,上传到别人服务器上也正常,就是在我linux服务器上就一直出现这个,“某某”变量没有值。 真的是坑死人呀!!查了好久都没找到问题。我都被逼的翻墙去国外的网站查了。学无止境呀!!一入程序深似海呀!! SQLSTATE[HY000]: General error: 1364 Field ‘xxxxx’ doesn’t have a default value 最终找到办...

奔跑的坏蜗牛 5428

Field ‘xxx‘ doesn‘t have a default value

问题说的很明白,字段xxx没有一个默认值。需要注意的是,如datetime这种字段在比较高版本的mysql里是强制非空的。

a1130683021的博客 536

错误号:1364 错误信息:Field 'platId' doesn't have a default value

1. 错误描写叙述 错误号:1364 错误信息:Field 'platId' doesn't have a default value insert into `use`.`t_platform_scale` () values () 2.错误原因 因为在建表时。给platId一个not null限制,并且没有给默认值,在插入数据时未插入。导致报错 3.解决的方...

weixin_34332905的博客 440

SQLSTATE[HY000]: General error:1364 Field ‘id‘ doesn‘t have a default value

错误示例图: 错误原因分析: 数据库该表中的该字段无法自动添加id,导致该值为空,进而无法成功添加数据。 修改: 方法一:(thinkphp5.1)查询该表的id列,按降序排列,获取最大的一个id值(第一个),在此基础上+1赋值给$data中,问题解决。 方法二(推荐):直接右键设计数据表,在下方勾选“自动递增”即可、 ...

记录和分享属于我的“IT”时光。 6380

MySQL之Field‘***’doesn’t have a default value错误解决办法

由于在 MySQL 5.0.2 以前,MySQL 对非法值检查并不严厉,而且为了数据输入还会强制将他们变为合法值。在 MySQL 5.0.2 以后的版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。

m0_68306922的博客 5189

ERROR 1300 (HY000): Invalid utf8 character string: '\xA1\xAF'

这是由于CMD字符集是GBK的,而MySQL字符集是UTF-8的 在mysql命令行输入 set names gbk; 如下图:

java程序员——佳崴 3551

MySQL8.0 错误代码: 1364 Field ‘id‘ doesn‘t have a default value

错误代码: 1364 Field ‘id’ doesn’t have a default value 解决方法:将对应的主键设置成自增的即可。

crraxx的博客 4772

mysql 1364 hy000_MYSQL插入报错:SQLSTATE[HY000]: General error: 1364 Field 'xxxxx' doesn't have a default...

mysql报错提示:SQLSTATE[HY000]: General error: 1364 Field ‘xxxxx’ doesn’t have a default value这个报错翻译过来就是:xxxxx字段没有默认的数值;也就是说我们没有为其分配数值,而表中此字段也没有设置默认值。这是MySQL5出来后搞出来的东东,认真看一下my.ini文件。我用的宝塔查看了下mysql配置:#这段sql...

weixin_35607952的博客 4173

MySql报错SQLSTATE「HY000」:General error: 1364 Field‘xxxxx‘doesn‘t have a default value

MySql报错SQLSTATE「HY000」:General error: 1364 Field‘xxxxx‘doesn‘t have a default value。我的是宝塔 修改mysql的配置 其他的配置应该是找到数据库安装目录的my.ini这个文件,或者老版本可以找my.cnf。查找sql-mode注释掉原来的 新写一条。然后保存重启mysql服务就行了。MySQL使用了严格验证方式。宝塔修改mysql的配置文件。

qq_27168283的博客 1034

1364 -Field id doesn‘t have a default value

错误图分析:缺少id解决成功图:

2301_79744036的博客 703
上一篇: 通过 mysql_multi 配置不同版本的 mysql
下一篇: 本地redis的rdb文件上传到阿里云redis,阿里云redis的上传和备份
beyond__devil
博客等级 码龄14年 147粉丝 314原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值