tp3.2 select查询 踩坑

来源:互联网 发布:2017 下半年 手机 知乎 编辑:程序博客网 时间:2024/06/06 04:27

本以为用过tp3.2框架写过几个项目,自认为对于tp3.2的查询方式已经是比较熟悉和了解,但是在某次做项目中一个查询出了错,找了好久才找到了问题。

先来看看问题

      $value="test";      //查询1      $result=M('test')->where("value='$value'")->find();      if($result)      {        echo "true";      }      else      {        echo "false";      }      //查询2      $result=M('test')->where("value=".$value)->find();      if($result)      {        echo "true";      }      else      {        echo "false";      }      //查询3      $data['value']=$value;      $result=M('test')->where($data)->find();      if($result)      {        echo "true";      }      else      {        echo "false";      }

以上三种查询方式,哪种能够正确执行呢?

经测试查询1和查询3均能正确查询,但查询2直接报错。
错误如下:
这里写图片描述

错误显示找不到’test’是哪一列?

是不能用查询2的方式查询吗?真正让我困惑的地方就是在这里,因为我通常都会用查询2的方式查数据库,但是这次却报错了,很费解。

于是我将查询语句打印出来,结果如下:

SELECT * FROM `test` WHERE ( value=test ) LIMIT 1

而正常的查询语句如下:

SELECT * FROM `test` WHERE ( value='test' ) LIMIT 1

发现只是一对引号的区别,而导致的错误。

错误分析:查询内容如果没加引号会被认为是字段名,所以才会出现’不知道该字段在哪列’的错误提示,因为数据库本就没有这个字段 。

当然上面的分析还有一个前提,那就是当查询的内容为字符串时却没有加引号,就会导致报错,但是如果要查询的内容是数字的话,那么就不会报错,也就是说查询2的查询方式不适用对字符串的查询。(数字字符串除外)

原创粉丝点击