A-A+

ThinkPHP3.2.3中屏蔽SQL语句语法错误

2017年12月04日 PHP开源系统 暂无评论 阅读 0 views 次

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语句错误,如下:

  1. try {  
  2.     $Report = M("Report")->where("id = $id")->find();  
  3. } catch (\Exception $e) { //www.xiariboke.com  
  4.     $res = array("code" => "error""message" => "参数不严谨错误");  
  5. }  

小提示,如果时间足够充裕的情况下,还是建议开启TP的自动验证功能,每一个提交的字段添加上正则表达式,在提交入口一次性根除所有因字段类型不严谨的错误。

标签:

给我留言

Copyright © 夏日博客 保留所有权利.   Theme  Ality 冀ICP备15026943号-2

用户登录