Heim  >  Artikel  >  Backend-Entwicklung  >  数据库(MySQL)意外报错出现在页面上的问题?

数据库(MySQL)意外报错出现在页面上的问题?

WBOY
WBOYOriginal
2016-08-04 09:21:121036Durchsuche

框架中如何禁止数据库(MySQL)意外报错?
比如说我这边有两个excel表格上传功能,当然我两个地方,写的excel接收数据的处理方法不一样,但是你知道,数据库中有些字段的名称不能为空,如果两个地方的excel文件互相对调上传,那么这个时候就会出现sql报错,就像下图这样:

数据库(MySQL)意外报错出现在页面上的问题?

  1. 如果我每个接收字段的数据,都要对应数据库做不能为空判断,岂不是太麻烦?

  2. 我一个excel表格上传功能,只单单对应的一个方法,也就是一对一。因为我excel结构不一样,所以一个方法对应一个类型的excel结构处理。

所以想求一个能屏蔽sql报错出现在页面上的解决办法,请大神指教。

回复内容:

框架中如何禁止数据库(MySQL)意外报错?
比如说我这边有两个excel表格上传功能,当然我两个地方,写的excel接收数据的处理方法不一样,但是你知道,数据库中有些字段的名称不能为空,如果两个地方的excel文件互相对调上传,那么这个时候就会出现sql报错,就像下图这样:

数据库(MySQL)意外报错出现在页面上的问题?

  1. 如果我每个接收字段的数据,都要对应数据库做不能为空判断,岂不是太麻烦?

  2. 我一个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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn