在ThinkPhp中我们可以通过以下方式获取数据库数据
- query:直接执行SQL查询操作
- find:查询单选数据集
- getField查询字段值
- select:查询数据集
- 其他......
但今天使用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; }
参考: