数据库(MySQL)意外报错出现在页面上的问题?
框架中如何禁止数据库(MySQL)意外报错?
比如说我这边有两个excel表格上传功能,当然我两个地方,写的excel接收数据的处理方法不一样,但是你知道,数据库中有些字段的名称不能为空,如果两个地方的excel文件互相对调上传,那么这个时候就会出现sql报错,就像下图这样:
如果我每个接收字段的数据,都要对应数据库做不能为空判断,岂不是太麻烦?
我一个excel表格上传功能,只单单对应的一个方法,也就是一对一。因为我excel结构不一样,所以一个方法对应一个类型的excel结构处理。
所以想求一个能屏蔽sql报错出现在页面上的解决办法,请大神指教。
回复内容:
框架中如何禁止数据库(MySQL)意外报错?
比如说我这边有两个excel表格上传功能,当然我两个地方,写的excel接收数据的处理方法不一样,但是你知道,数据库中有些字段的名称不能为空,如果两个地方的excel文件互相对调上传,那么这个时候就会出现sql报错,就像下图这样:
如果我每个接收字段的数据,都要对应数据库做不能为空判断,岂不是太麻烦?
我一个excel表格上传功能,只单单对应的一个方法,也就是一对一。因为我excel结构不一样,所以一个方法对应一个类型的excel结构处理。
所以想求一个能屏蔽sql报错出现在页面上的解决办法,请大神指教。
数据库报错不是不能屏蔽,但是没必要,而且这会产生更多问题。既然某字段不能为Null自然有其道理,你非要写进去那后面处理的时候到了这个地方怎么办?由此也可以看出你没有对数据在执行插入前进行有效性检查,上传数据等同于用户录入的数据,必须防止脏数据进入。
通常的处理逻辑为:
逐行读取csv,使用验证规则验证数据,如果ok存入$success,否则存入$bad,根据业务逻辑不同,当$bad非空时可能先显示清单要求用户确认抛弃不合法的数据,也有的直接把$success中的数据遍历插入,然后生成报告哪些已经插入,哪些未处理。
既然你有多种格式的csv,自然应该检查一下当前上传的csv是否与处理方法一致,否则万一真存进去了怎么办?真心不建议偷懒。
用 try {}catch (Exception $e){}捕捉异常就可以了
框架的话应该可以关闭debug模式,按理说都可以自动屏蔽掉的。
如果是想要在代码中手动把空字段设置为默认值,可以自己写一个过滤器,过滤器里面判断是否为空,是的话给一个默认值。
1、你可以在数据库设计的时候定义一个默认值比如0
2、在程序上在插入这条数据时,user_id字段你保证它有值。
如果生产中该字段允许为 null ,那就改表
如果不允许,那报错就说明数据有问题,ignore 是有危险的。你应该保证源数据不为 null,而不是粗暴地 ignore
推荐阅读
-
mysql数据库ERROR#1442报错问题的解决方法
-
使用cmd运行mysql数据库的时候,报错:"不是内部命令也不是可有运行的程序"问题的解决办法
-
解决DB2的数据库备份参数修改后的报错问题_MySQL
-
mysql数据库ERROR#1442报错问题的解决方法
-
无法启动MySQL服务,报错1067进程意外终止的问题_MySQL
-
数据库(MySQL)意外报错出现在页面上的问题?
-
mysql-MySQL数据导入到同数据库的另一张不存在的表,请教我写的有什么问题,创建表的时候ID报错
-
无法启动MySQL服务,报错1067进程意外终止的问题_MySQL
-
数据库(MySQL)意外报错出现在页面上的问题?
-
mysql-MySQL数据导入到同数据库的另一张不存在的表,请教我写的有什么问题,创建表的时候ID报错