thinkPHP 远程数据库和远程连接数据库表名大小写混合

Posted 韦书文

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkPHP 远程数据库和远程连接数据库表名大小写混合相关的知识,希望对你有一定的参考价值。

做项目的时候,遇到了一个问题,远程连接数据库获取表时,如果数据库表示混合型的大小写,就会出现bug。一般第一个大写字母会变成小写,中间的大写字母会变成“_”,查了好多资料,才知道是thinkphp本身的bug(我用的thinkphp是3.2版本的),主要是由这两点组成

1.ThinkPHP/Common/functions.php 中,第457行的原因

2.ThinkPHP/Library/Think/Model.class.php中第1490行的原因

现在我们知道了问题所在,现在开始解决问题吧。

首先远程连接数据库

1.在配置模板中添加数据库的账号和密码,也可以添加在需要用的版块中,这里就不多讲了

2.连接数据库,如下图所示

12,13行是我的数据库账号和密码,第15行$ip是我需要远程的电脑(远程连接数据库,我是通过wifi进行连接的,首先要连接同一个局域网下,然后确定是否可以ping的通要远程连接的电脑),第16行是连接数据库的命令,ir是我的数据库名#utf-8是防止数据库名为中文的兼容,一般都是中文。17行是获取哪一个数据表,第18行是显示数据库的具体信息,第19行是判断是否获取数据,如果失败则返回false,如下图所示:

  

  

dump($re);显示的第bool(false),表示并未获取到远程的信息,["name":protected]=string(11) "ActionLists"是我们要查询的数据库表,但是数据库默认的是获取trueTableName的数据库,很明显数据库已经被破坏了,不想乱改配置文件,因为害怕会影响别的文件,可以这样写,获取tableName的值,然后把TrueTableName的strtolower函数去掉即可。如下图所示

本地连接数据库可以写成

也就是把要连接的数据库的位置换一下,即修改第16行的位置。如上图所示:不赋值给["name":protected] ,而赋值给["tablePrefix":protected]即可,然后修改ThinkPHP/Library/Think/Model.class.php中的1941行即可,如下图所示

  

把strtolower去掉即可,就可以显示打印的内容了,如下图所示:

  

如上图所示:把值赋值给了["tablePrefix":protected],["trueTableName":protected]为正常,可以使用表名混合大小写了

这样问题就解决了

以上是关于thinkPHP 远程数据库和远程连接数据库表名大小写混合的主要内容,如果未能解决你的问题,请参考以下文章

PLSQL Developer连接的是远程的数据库,查询时怎么设置表名前面不加数据库名

怎么用SQLyog连接本地数据库和远程数据库

视频学习笔录---ThinkPHP---thinkphp模型(M)

实现远程连接MySQL

设置如何远程连接mysql数据库

thinkphp 驼峰怎么映射数据库表名