首页 > thinkphp_sql查询语句

thinkphp_sql查询语句

在thinkphp的控制器中写sql语句的时候,哪种写法是正确的?

$result = $m->where('username="'.$user.'"')->find();
$result = $m->where('username='.$user)->find();

【代码A】

    public function checkuser(){

        $user = I('post.user');

        $m = M('users');

        $result = $m->where('username="'.$user.'"')->find();

        $this->ajaxReturn($result);

    }

【代码B】

    public function checkuser(){

        $user = I('post.user');

        $m = M('users');

        $result = $m->where('username='.$user)->find();

        $this->ajaxReturn($result);

    }

我觉得代码A比较靠谱,TP的官方文档的示例中模型查询这块对于字符串的处理都是加上双引号的参考链接
如果说对于字符串参数没有任何过滤的话,B代码很容易出现注入漏洞。

嗯 感谢@micblo的提醒,这两种如果不做额外的过滤处理的话确实都不防御sql注入,但是如果是用的B的风格的话可能在开发过程中测试的时候不经意间传错参数而返回错误的查询结果(自己以前确实遇到过这种问题),所以题主如果是依然要坚持使用上面的两种之一,还是建议使用A。


建议还是用官方的例子。

$User = M("users");
$condition['username'] = $user;
$User->where($condition)->select(); 

A、B两种都不防御SQL注入

对ThinkPHP不是很了解,貌似要

    I('post.name','','htmlspecialchars');

这样获取才可以过滤一些危险的符号

【热门文章】
【热门文章】