关于php:MDB2在重新连接时会断开连接并忘记字符集设置

关于php:MDB2在重新连接时会断开连接并忘记字符集设置

MDB2 disconnects and forgets charset setting when reconnecting

我们最近调试了一个奇怪的错误。找到了解决方案,但是该解决方案并不完全令人满意。

我们使用IntSmarty来本地化我们的网站,并使用我们自己的包装器将本地化的字符串存储在数据库中。 IntSmarty在其析构函数中保存它可能具有的所有新字符串,从而导致数据库调用。

我们使用MDB2的Singleton实例针对MySQL进行查询,并且在连接后,我们使用SetCharset()函数将字符集更改为UTF-8。我们发现在完成最终插入时,IntSmarty保存的字符串被解释为ISO-8859-1。我们仔细查看了查询日志,发现在调用IntSmarty的析构函数之前,MySQL连接已断开连接。然后重新建立它,但是在新连接上没有发出" SET NAMES utf8"查询。这导致保存的字符串被MySQL解释为ISO-8859-1。

似乎没有设置MDB2上默认字符集的选项。我们针对此问题的解决方案是通过添加以下内容来更改MySQL服务器配置

1
init-connect='SET NAMES utf8'

到my.cnf。这仅解决了我们的字符集始终相同的问题。

因此,有什么方法可以防止在运行所有查询之前断开连接吗?我可以强制在其他所有操作之后销毁MDB2实例吗?

打开持久连接有效,但不是理想的答案。


从PHP5文档中:

The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed or in any order in shutdown sequence.

PHP documentation

(强调我的)

可能发生的情况是您的脚本没有显式销毁对象,因此,当PHP到达脚本的末尾时,它将开始按照其感觉的顺序清理所有内容(在您的情况下,这是先关闭数据库链接) 。

如果在脚本实际结束之前明确销毁IntSmarty对象,那应该可以解决您的问题。


推荐阅读

    linux命令连接数修改?

    linux命令连接数修改?,服务,系统,网络,环境,密码,情况,地址,命令,服务器,表

    linux设置命令行长度?

    linux设置命令行长度?,系统,工作,信息,地址,命令,工具,异常,管理,目录,文件,l

    linux设置代替命令?

    linux设置代替命令?,系统,地址,网络,工作,软件,工具,服务,信息,命令,别名,lin

    linux网口连接命令?

    linux网口连接命令?,网络,系统,地址,密码,检测,软件,情况,分析,电脑,状态,怎

    linux命令设置时区?

    linux命令设置时区?,时间,系统,国家,大陆,命令,时区,时钟,日期,指令,时分,lin

    断开一个长命令linux?

    断开一个长命令linux?,系统,信息,工作,名称,暂停,软件,地址,命令,代码,状态,l

    linux的网络连接命令?

    linux的网络连接命令?,地址,系统,工作,网络,工具,信息,命令,基础,服务,目录,l

    linux设置命令限制?

    linux设置命令限制?,数字,情况,信息,管理,系统,最新,在线,设备,第一,发行,Lin

    linux设置日志命令行?

    linux设置日志命令行?,异常,系统,实时,日志,管理,信息,对比,项目,名称,情况,L

    linux命令行设置网卡?

    linux命令行设置网卡?,系统,地址,信息,网络,工具,电脑,工作,名称,设备,网卡,l

    linux命令优先级设置?

    linux命令优先级设置?,系统,时间,实时,策略,优先级,分时,管理,周期性,进程,

    linux设置ip命令?

    linux设置ip命令?,地址,系统,密码,设备,命令,服务,工具,网络,网卡,计算机,在L

    关于linux命令连接符?

    关于linux命令连接符?,位置,数据,链接,系统,概念,档案,文件,符号,节点,命令,l

    linux设置命令是什么?

    linux设置命令是什么?,系统,工作,信息,名称,地址,命令,在线,基础,标准,工具,l

    linux命令连接端口?

    linux命令连接端口?,地址,系统,服务,情况,环境,端口,灵活,软件,资料,检测,如

    linux连接命令怎么用?

    linux连接命令怎么用?,工作,地址,系统,网络,工具,信息,服务,命令,标准,名字,L

    linux加软连接命令?

    linux加软连接命令?,位置,系统,设备,链接,文件,交通,信息,数据,对比,地方,在L

    linux命令设置密码?

    linux命令设置密码?,密码,系统,服务,软件,地址,电脑,流程,管理,用户,命令,问

    linux转换字符集命令?

    linux转换字符集命令?,系统,名称,时间,位置,服务,文件,字符集,命令,格式,以

    linux设置编码命令?

    linux设置编码命令?,系统,数据,发展,文件,字符集,命令,数据库,以下,终端,大