关于ThinkPhp中getField方法存在的问题

在ThinkPhp中我们可以通过以下方式获取数据库数据

  1. query:直接执行SQL查询操作
  2. find:查询单选数据集
  3. getField查询字段值
  4. select:查询数据集
  5. 其他......
 
但今天使用getField方法时查询某些字段时发现返回的结果却是Array类型(正常情况下是数据库中该字段对应的类型)
经过反复测试后又看了ThinkPhp的源码才发现原来getField的第一个参数中如果有字符","那么ThinkPhp会认为你查询的是多个字段,因此返回的结果就是Array类型
而正好我getField里的字段使用了Mysql中的某些函数(该函数包含字符",")

 

function get_new_id(){
   //注意:使用getField方法时,如果不是查询N个字段那么应该防止字段中出现字符','
   //因为ThinkPhp会认为你是查询多个字段所以返回的结果是Array类型
   //返回数据库最大ID并加1
   return $this->model->getField("IFNULL(max(id),0)+1");
}

  

 
 
 
通过源码可以知道在使用getField方法时查询的字段在使用数据库函数时应该避免出现字符","
更改后的代码
 
//生成新的ID
function get_new_id(){
   //获取数据库最大ID并加1
   $id = $this->model->getField("max(id)+1");
   //如果数据库中没有数据则默认为1
   if($id<=0) $id = 1;
   return $id;
}

  

 
参考:





posted @ 2016-07-07 10:53  HTL  阅读(1709)  评论(0编辑  收藏  举报
htl