• 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]为正常,可以使用表名混合大小写了

    这样问题就解决了

  • 相关阅读:
    Memcached下载、安装及使用演示。
    Redis和Memcache对比及选择
    Log4Net.Config配置信息《转》
    常用正则表达式!收藏
    关于ViewData,ViewBag,TempData三者学习记录!
    C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)<转>
    C# AutoResetEvent
    C#英文面试常见问题[转]
    Highsoft.Highcharts 5.0.6439.38401 key
    vs2017安装后自动应用许可证
  • 原文地址:https://www.cnblogs.com/wsw8384/p/9640592.html
Copyright © 2020-2023  润新知