如果两个用户同时加载此页面,使用两个不同的$dbname变量,那么PHP只与数据库建立一个连接还是两个?我相当肯定
@H_404_1@$conn = MysqL_connect( $server,$pass );会有两个联系.
如果pconnect重用第一个用户打开的连接,MysqL_select_db调用是否适用于第二个用户?
理想情况下,我正在寻找的是一种减少数据库连接但仍能在每个PHP脚本中设置默认数据库的方法.我有客户都使用相同的PHP脚本,但数据存储在他们自己的客户端数据库中(因此,$dbname总是不同,但MysqL连接参数是相同的 – 相同的MysqL IP地址,用户和密码).
希望有道理.我们可以使用MysqL,MysqLi或PDO,只需要知道如何以最好的方式实现这一点,而不会让客户意外地将数据写入别人的数据库!提前致谢.
Second,the connection to the sql server will not be closed when the execution of the script ends. Instead,the link will remain open for future use ( MysqL_close() will not close links established by MysqL_pconnect()).
Persistent connections work well for CGI PHP managed by fastCGI,contrary to the suggestion above that they only work for the module version. That’s because fastCGI keeps PHP processes running between requests. Persistent connections in this mode are easily made immune to connection limits too,because you can set PHP_FCGI_CHILDREN << MysqL’s max_connections <<< Apache’s MaxClients. This also saves resources.
Prepending host by p: opens a persistent connection. MysqLi_change_user() is automatically called on connections opened from the connection pool.
MysqLi_change_user的文档:
Changes the user of the specified database connection and sets the current database.
所以我的理解如下:pconnect在脚本结束后保持连接打开但是进程(或者可能是进程组)仍处于活动状态(例如在设置了FCGI的服务器中).一次只有一个脚本使用连接,当新脚本获取该连接时,将更新用户和数据库.
因此,如果使用FCGI和持久连接,则可以减少打开的数据库连接数,但同时运行的脚本将不会共享同一连接.关于选择哪个数据库,连接没有问题.