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 ...
随机推荐
- 计算机网络-5-10-TCP运输连接管理
TCP的运输连接管理 TCP是面向连接的通信,运输连接是用来传送TCP报文的,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输连接有三个阶段,即:建立连接,数据传送,连接释 ...
- Vuex 状态管理的工作原理
Vuex 状态管理的工作原理 为什么要使用 Vuex 当我们使用 Vue.js 来开发一个单页应用时,经常会遇到一些组件间共享的数据或状态,或是需要通过 props 深层传递的一些数据.在应用规模较小 ...
- Yarn命令列表
常用命令: 创建项目:yarn init 安装依赖包:yarn == yarn install 添加依赖包:yarn add Yarn命令列表 命令 操作 参数 标签 yarn add 添加依赖包 包 ...
- 有手就行4——jenkins项目构建类型(自由风格,maven风格)
有手就行4--构建Maven项目 Jenkins项目构建类型(1)-Jenkins构建的项目类型介绍 Jenkins项目构建类型(2)-自由风格项目构建 Jenkins项目构建类型(3)-Maven项 ...
- python篇第5天【变量】
第4天加班 多个变量赋值 Python允许你同时为多个变量赋值.例如: a = b = c = 1 以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上. 您也可以为多个对象指定多个变 ...
- Spring Security 介绍
Spring Security介绍 开源 提供企业级的安全认证和授权 Spring安全拦截器 认证管理器 认证模式 Basic HTTP 1.0中使用的认证方法,使用用户名和密码Base64编码的方式 ...
- 在Linux中设置php变量的方法
默认情况下已经安装好了PHP环境,并且知道安装好后的PHP文件路径,然后可以通过以下的方式设置PHP变量,快速执行PHP命令运行PHP文件. 环境:centos 第一步:vi ~/.bash_prof ...
- 基于XC7Z100+AD9361的双收双发无线电射频板卡
一.板卡概述 板卡基于Xilinx公司的SoC架构(ARM+FPGA)的ZYNQ7100芯片和ADI公司高集成度的捷变射频收发器AD9361,实现频谱范围70MHz~6GHz,模拟带宽200KHz~5 ...
- JMM之Java线程间通讯——等待通知机制及其经典范式
在并发编程中,实际处理涉及两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体). 通信是指线程之间以何种机制来交换信息.在共享内存的并发模型里,线程之间共享程序的公共状 ...
- pagehelper 自循环启动报错
问题原因 问题产生的原因是 ServiceA实现类中引入了ServiceB,而在ServiceB实现类中又引入了ServiceA,导致循环依赖注入. 其实在代码开发过程中应该尽量避免这种操作的出现,即 ...