2013-08-28 78 views
0

我最近从一个PHP项目从ext/mysql切换到mysqli。在该项目中,我通过将new_link参数设置为false,广泛地使用了mysql_connect的连接重用功能。分享mysqli连接

据我所知,mysqli_connect中没有这样的机制;即使使用相同的主机和用户,它也会始终返回新的连接。它是否正确?是否有其他功能可以模仿重用行为?

注:我看到,与主机预先p:将创建一个持久连接。但是,这不能用于我的情况,因为我的项目的一部分依赖于临时表。

更新:
实际mysqli的对象嵌入在管理访问数据库DB处理类。该处理程序总是用于与数据库进行交互。

我简化了我的问题,因为我只是想集中讨论mysqli是否可以通过多次调用具有相同参数的mysqli_connect自动重复使用单个连接的问题。我的项目是对框架的扩展,并提供多个入口点和挂钩。我无法控制从主机框架到我的扩展功能的命令或数量。我的扩展的每个部分都创建了一个DB处理程序的实例,但可以重用实际的基础连接。

DB处理程序的创建是通过db工厂完成的。所以我很可能必须在那里自己实现某种连接缓存...

+0

不应该持久连接保持,因为它会保持池重用? “持久连接背后的想法是,客户端进程和数据库之间的连接可以被客户端进程重用,而不是被多次创建和销毁。” – Prix

+0

我认为使用持久连接可能会导致温度问题。表,并且由于我无法控制服务器配置,我宁愿不使用此功能。但是,我仍然不知道是否多次打开来自同一脚本的持久连接将始终返回相同的连接*,而不关闭连接* –

+0

试验和错误;) – Prix

回答

0

不,mysqli ext不遵循那个懒惰的mysql ext行为,并且出于某种原因。
所以,你必须始终明确地解决mysqli对象。但唯一的问题是可变范围。但只要你有$mysqli对象可见,你就可以使用它。

但是,还有一个问题:根本不应该在应用程序代码中填写$mysqli对象。这是旧的mysql ext的一个问题,这也是mysqli ext的问题 - 它并不打算在应用程序代码中原样使用。

一个必须创建某种包装的,封装所有数据库相关的东西,并在应用程序代码中唯一始终使用该包装类。

因此,让自己这样一个包装,创建它的一个实例,然后传递到每个类和函数作为参数。

+0

我简化了...我使用包装和创建它的工厂!检查我的更新 –

+0

那么它应该没有问题 –