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]为正常,可以使用表名混合大小写了
这样问题就解决了