A-A+
ThinkPHP3.2.3中屏蔽SQL语句语法错误
TP3.1与TP3.2最大的区别就是3.2对于数据更加严谨了,比如在TP3.1中的SQL完全可以直接查询的,如果查不到的话,是不会报错的,而在3.2当中则会将SQL语句错误给报出来呈现出来,当然我们可以关闭调试模式,但是会出现一个大大的页面错误公众页,这显然不是我们想要的。
在TP3.1版本中,我们完全可以获取返回的SQL错误信息,但在TP3.2中,是无法获取到SQL错误信息的,这就导致,无法判断SQL是否是正确的,这类错误通常表现在字段缺少的情况下,我们来看一个类似的SQL语句:
$Report = M("Report")->where("id = $id")->find();
不管是增删改查,只要找不到相应字段都会出现错误,甚至查询每次查询的时候都要查找一下返回结果集是否为空。我们看一下暴露给用户的SQL错误截图,如下。
其实错误很明显,就是SQL语句不严谨所造成的,同样的错误表现在如mysql中定义的是int类型,而在提交的时候提交汉字或者大于 11 位的数字则会出现这样的错误,一方面我们可以通过严谨SQL语句对应MYSQL的字段来解决问题,这也是TP3.2希望我们规范的地方,这是最好的,也就是在每一次提交的时候都进行一个数据的验证,虽然规范了提交字符的规范,但也同样拖慢了开发的效率,所以有的时候,有些数据不需要验证的时候,完全可以将错误屏蔽掉。我们可以通过TP的捕获错误功能来屏蔽掉SQL语句错误,如下:
- try {
- $Report = M("Report")->where("id = $id")->find();
- } catch (\Exception $e) { //www.xiariboke.net
- $res = array("code" => "error", "message" => "参数不严谨错误");
- }
小提示,如果时间足够充裕的情况下,还是建议开启TP的自动验证功能,每一个提交的字段添加上正则表达式,在提交入口一次性根除所有因字段类型不严谨的错误。