thinkphp
thinkphp copied to clipboard
ThinkPHP3.2 ——基于PHP5的简单快速的面向对象的PHP框架
在Model.class.php 中随处可以见 $options['where'][$pk] 类似代码。而$pk有可能是array。这是一个典型的语法错误。
const THINK_VERSION = '3.2.3'; # ThinkPHP\Library\Think\Db\Driver.class.php 最近在用到事务开发的时候,发现明明事务回滚了,但是之前的操作还是提交了上去。查了一下相关代码,知道问题出在Driver.class.php 的 $transTimes 参数上面,这是了判断事务是否开启的重要参数。具体分析如下。 第一次开始事务事,调用Model的startTrans,实际上执行 $this->commit(); //这里调用Driver的commit(),第一次运行transTimes会变成 -1 (transTimes--) # $this->db->startTrans(); //这里开始事务,0 == $this->transTimes 才真正开始事务。因为当前transTimes=-1,所以事务实际没有开启。 我自已在Driver的commit()的 $this->transTimes-- 后面,加了一句 if($this->transTimes < 0) $this->transTimes = 0;...
原来复合查询条件 or 只支持 $_map=array(); $_map['name'] = "lilei"; $_map['_logic'] = 'or'; 不支持 $_map['name'] = array('like','lilei');或者 其它数组,加了以后可以支持。
看源码并没有使用缓存,cache==false 但是,传递不同的id参数,查询得到的是同一条记录,如Product::get(1) 和Product::get(10)可能得到的都是id为1的记录
Sqlite.class.php取得数据表的字段信息错误 Thinkphp版本3.2.3_full 文件:ThinkPHP/Library/Think/Db/Driver/Sqlite.class.php 问题描述: sqlite3在执行add方法时传入的data为空,经检查,在Thinkphp的Model.class.php文件中使用_facade() 方法时会对比Sqlite.class.php中getFields()返回的信息,如果不符合则过滤,但是getFields()返回的是一个二维数组, 正确的信息保存在第二个元素中,因此将getFields()方法最后一行由 return $info; 修改为: return $info[1]; // k4u_fish modify 测试环境:linux mint 18 php7 sqlite3
如下查询: ``` $db->where('test=1') ->limit(10,1) ->getField('test');//或者使用find ``` 事实上我想查询游标位置为10的一行记录,但是使用了getField/find之后limit条件被强制改为Limit 1 其实如果真的想在getField/find之后只查询一行数据的话,大可以在find/getField里检测当前limit条件是否是查询一行,而不应该更改游标位置
官方文档中指出function和callback支持多字段验证,看过源码后发现unique也支持多字段验证,但是当验证模式为默认的时候,即EXISTS_VALIDATE验证,多字段验证无效。 在ThinkPHP/Library/Think/Model.class.php文件autoValidation函数中,对于EXISTS_VALIDATE验证,代码如下: ``` if (isset($data[$val[0]])) { if (false === $this->_validationField($data, $val)) { return false; } } ``` 对于这段代码,如果验证字段形如“field1, field2”,则根本不会执行if后面的语句,所以多字段无效; 还有对于unique的对字段处理,貌似没有对空格做trim,可能也会导致问题
dump函数中htmlspecialchars增加编码设定,修复遇到中文非utf8编码无输出bug
22行,use Org\Util\Date as Date;在IDE下报类已存在。
有时候网站用了 cdn 前端是 https,但实际运行 php 的服务器是 http 的,这个时候 is_ssl 会认为 url 是 http 协议。 这种情况一般可以通过 X_FORWARDED_PROTO 做判断,建议修正代码如下: `function is_ssl() { if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){ return...