Thinkphp3.2数据库字段自动转小写,字段大小写自动转换,以及thinkphp3一些bug
公司在使用thinkphp框架,版本也有些老,被一些bug坑了,记录一下
自动转小写解决办法,最简单的就是在配置文件加上
'DB_PARAMS' => [\PDO::ATTR_CASE => \PDO::CASE_NATURAL],
但是如果项目已经上线了一段直接, 这样可能会影响其他人写的
然后我想在控制器里面动态改变DB_PARAMS这个配置,后来发现不行.
因为基类里面有数据库操作,model是单例的.不会重新new对象.
最后我想到了一个办法,重新声明一个函数,就是为了让他重新new一个model
function db($table=''){
C('DB_PREFIX','');
$config = [
'db_type' => C('DB_TYPE'),
'db_user' => C('DB_USER'),
'db_pwd' => C('DB_PWD'),
'db_host' => C('DB_HOST'),
'db_port' => C('DB_PORT'),
'db_name' => C('DB_NAME'),
'db_params' => [
\PDO::ATTR_CASE => \PDO::CASE_NATURAL,
],
];
return M($table)->db('wzb',$config);
}
这样在试用的时候,把M换成db就好了
如果还想修改其他参数,可以参照ThinkPHP\Library\Think\Db.class.php,大概在56行左右,其中parseConfig函数,里面有配置的参数
因为公司项目每次实例化model都是M('tableName',null),所以我把表前缀也去掉了.
温馨提示: 楼主不建议表中的字段含有大写,建议试用小写+斜划线的命名方式.
版本:thinkphp3.1的pdo扩展
问题1:在使用pdo链接方式的时候,使用模型find($id)方法时,不会自动识别主键
解决办法:在ThinkPHP\Extend\Driver\Db\DbPdo.class.php中,大概在178行下面加上
if($info['primary']===false){
$info['primary'] = $val['key'];
}
版本:thinkphp3.1
问题2:如果开启自动过滤数据库不存在的字段(默认开启),使用join的时候,会过滤掉where里面的join外表里面的字段
解决办法:在ThinkPHP\Lib\Core\Model.class.php中,大概在549行
把if(isset($options['where']) && is_array($options['where']) && !empty($fields))) {
改成 if(isset($options['where']) && is_array($options['where']) && !empty($fields) && !isset($options['join'])) {
就是多加一个!isset($options['join'])条件
问题3:模板自动压缩了,导致html换行没有空格. 其实这个也不算bug, 这个默认是开启的.
解决办法:配置文件改一下TMPL_STRIP_SPACE参数
Thinkphp3.2数据库字段自动转小写,字段大小写自动转换,以及thinkphp3一些bug的更多相关文章
- [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段
sql注入后可以通过该数据库获取所有表的字段信息 1. COLLATIONS表 提供有关每个字符集的排序规则的信息. COLLATIONS表包含以下列: COLLATION_NAME 排序规则名称. ...
- 数据库中存储日期的字段类型到底应该用varchar还是datetime
将数据库中存储时间的数据类型改为varchar(),这时最好让这些时间是数据库中自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字 ...
- 在PowerDesigner中自动生成sqlserver字段备注
在PowerDesigner中自动生成sqlserver字段备注 PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生 ...
- Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上 ...
- [转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏
Oracle数据库lob大对象数据类型字段总结,值得收藏 原创 波波说运维 2019-07-11 00:02:00 https://www.toutiao.com/i67108943269703357 ...
- mysql数据库之表操作及字段约束条件
目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...
- EF部分字段更新,自动忽略null字段
某个项目里的update代码是类似这样的 public T Update<T>(T entity) where T : ModelBase { var set = this.Set< ...
- Visio 2007中进行数据库建模时如何显示字段类型以及概念名称
关于在VISIO中进行数据库建模时如何显示字段类型,以及注释的 1 如何显示字段类型: 在visio菜单上--->点击数据库--->选项--->文档 打开后选择表这项,在上 ...
- access数据库用sql语句添加字段,修改字段,删除字段
用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...
随机推荐
- Redis 中如何保证数据的不丢失,Redis 中的持久化是如何进行
Redis 中数据的持久化 前言 AOF 持久化 什么是 AOF 持久化 为什么要后记录日志呢 AOF 的潜在风险 AOF 文件的写入和同步 AOF 文件重写机制 AOF 的数据还原 RDB 持久化 ...
- CF388C Fox and Card Game
基于观察可以发现,双方都一定能保证取到每一列靠近自己的 \(\lfloor \frac{k}{2} \rfloor\) 个元素. 那么一旦一个人想要取另一个人能必然能取的部分,另一个人必然可以不让其取 ...
- java实现HTTPS单向认证&TLS指定加密套件
1.HTTPS介绍 由于HTTP是明文传输,会造成安全隐患,所以在一些特定场景中,必须使用HTTPS协议,简单来说HTTPS=HTTP+SSL/TLS.服务端和客户端的信息传输都是通过TLS进行加密. ...
- DOM Document.readyState 属性
感谢原文作者:MDN 原文地址:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/readyState 描述 一个document 的 ...
- 报错:java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
感谢原文作者:风起云淡- 原文链接:https://blog.csdn.net/shenguan777/article/details/78615521 异常分析: 在使用MySql时,如果数据库中有 ...
- 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
一.环境准备 两台主机: httpd+php(fastcgi模式) mariadb 服务器 软件版本: mariadb-10.2.40-linux-x86_64.tar.gz apr-1.7.0.ta ...
- 关于Java多线程-interrupt()、interrupted()、isInterrupted()解释
多线程先明白一个术语"中断状态",中断状态为true,线程中断. interrupt():就是通知中止线程的,使"中断状态"为true. isInterrupt ...
- springboot学习第一步
关于springboot的介绍就不多说了,可以去百度. 默认的情况下,springboot1.4.0版本要求Java7以上和spring4.3.2以上,当然你也可以使用java1.6,只不过你需要额外 ...
- 《PHP程序员面试笔试宝典》——如何准备电话面试?
本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 用人单位在收到简历之后,有时候由于求职者众多,而且很多求职者的 ...
- Solution -「多校联训」消失的运算符
\(\mathcal{Description}\) Link. 给定长度为 \(n\) 的合法表达式序列 \(s\),其中数字仅有一位正数,运算符仅有 - 作为占位.求将其中恰好 \(k\) ...