【原创】qeephp优化-9:解决DB直连查询时因字符串变量引起的数据库查询失败的BUG

blogdaren 2016-06-07 抢沙发 1482人次

问题现象:

1.png

2.png

问题原因:

定位到底层代码:  vi qee_framework/library/db/adapter/mysql.php +132

3.png

(1)  mysql_real_escape_string函数是依赖数据库连接的以及连接使用的字符集的

(2)  然而底层在调用qstr()方法时,若采用直连查询,该方法内部是没有获取到 $this->_conn 数据库句柄的

(3)  你也可能奇怪,那为啥传递一个整型变量就没问题呢?看底层代码你就会发现其实逻辑就没走到132行,也就是避免了数据库连接一说

解决方法:

(1) 使用地道的查询方式: Model::find(...)->where(...),  这样调用底层会避免上述问题,但我们是解决问题,不逃避问题,绕过。

(2) 使用mysql_escape_string()函数替代mysql_real_escape_string()函数:因为该函数不关心数据库连接以及连接字符集,同样不解决根问题,绕过。

(3) 紧挨着mysql_real_escape_string()函数上方即131行增加一段mysql重连逻辑即可,代码:

5.png

最终效果:

66.png


版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】qeephp优化-9:解决DB直连查询时因字符串变量引起的数据库查询失败的BUG

发表评论:

您的昵称:
电子邮件:
个人主页: