TP5 数据库实例化后数据库配置修改不再生效

需求:根据登录成功的用户 session 中获取用户的数据库配置信息进行动态地配置数据库连接,但在进行任何要连接相对应的用户数据库之前,要先记录用户的行为到一个固定的数据库。

失败的方案:把数据库配置预先设置为 记录用户行为的数据库信息,然后获取用户 session 中的数据库信息进行动态的修改配置信息。

失败原因:数据库模型或者DB类为单例模式。进行数据库操作时,先判断实例是否存在,不存在则读取数据库配置文件进行实例化;如果存在则获取该实例,不再读取配置。所以在记录用户行为时为第一次进行数据库操作,这时读取配置进行实例化,而此后的数据库操作则读取该实例。所以后面用 session 中的信息修改数据库配置并没有被使用到。(猜想,等有空读完 ThinkPHP5.0 的源码再确定)

成为方案:一、单独在记录用户行为的数据库模型中设置连接属性,二、在数据库实例化前用 session 中的值替换配置文件的(数据库配置文件的信息可先设置为空,这样如果在动态修改数据库配置之前,做数据库操作时将会报错 )

发表评论

关闭菜单