19

我打算使用MYSQL。是否有可用的连接池扩展?或者连接的正常做法是什么?是不是到处都用这个...

mysqli_connect("localhost", "xxx", "xxx", "test");

人们只是使用普通的mysql_connect还是pconnect..?PConnect有多好pconnect,我应该做哪些设置?

4

6 回答 6

22

你用过mysql_pconnect()吗? 行为与两个主要区别mysql_pconnect()非常相似。mysql_connect()

首先,在连接时,该函数将首先尝试查找已使用相同主机、用户名和密码打开的(永久)链接。如果找到,将返回它的标识符,而不是打开新连接。

其次,脚本执行结束时不会关闭与 SQL 服务器的连接。相反,该链接将保持打开状态以供将来使用(mysql_close()不会关闭由 建立的链接mysql_pconnect())。

因此,这种类型的链接被称为“持久”

在这里检查

于 2009-05-06T17:15:13.500 回答
10

PHP 5.3 中为 mysqli 扩展引入了持久连接支持。PDO MYSQL 和 ext/mysql 中已经存在支持。持久连接背后的想法是客户端进程和数据库之间的连接可以被客户端进程重用,而不是被多次创建和销毁。这减少了每次需要时创建新连接的开销,因为未使用的连接被缓存并准备好被重用。

与 mysql 扩展不同,mysqli 没有提供单独的函数来打开持久连接。要打开持久连接,您必须在连接时将 p: 添加到主机名。

来源:http ://www.php.net/manual/en/mysqli.persistconns.php

sample code:
$GLOBALS["mysqli"] = new mysqli('p:localhost', 'username', 'password', 'db_name');

编辑:对不起,没有看到其他答案。

于 2011-06-01T10:02:54.237 回答
4

使用 mysqli 或 PDO 扩展而不是旧的 mysql 扩展。

你可以告诉mysqli_connectmysqli::__construct使用持久连接,如果你在你的主机名前加上'p:'

http://php.net/manual/en/mysqli.construct.php

于 2011-08-02T12:34:22.393 回答
3

This is an old question, but I wanted to add my two cents, as I was looking at this same issue. As of PHP 5.3, mysqli supports persistent connections, you just need to prepend p: to the front of the host name.

If you are running Apache, have you tried looking into connection pooling with mysql through the Apache mod_dbd module? It supports connection pooling for MySQL. http://httpd.apache.org/docs/2.2/mod/mod_dbd.html

于 2010-07-01T03:49:24.537 回答
1

有3个连接功能:

mysql_connect:正常连接,没有池,不能执行存储过程(只是sql)

mysql_pconnect:池连接,不能执行存储过程(只是 sql)

mysqli_connect : 正常连接,无pooling,可以执行存储过程(需要mysql 5以上)

mysqli_pconnect:不存在。没有内置的连接函数既处理存储过程又处理池

我的建议(通过经验和冲浪):

如果您需要存储过程,请省略池并使用 mysqli_connect

如果不需要存储过程,请使用 mysql_pconnect

于 2010-03-21T08:41:40.857 回答
0

不完全是一个答案,但我认为您可能还会考虑 PHP 数据对象 (PDO) http://php.net/manual/en/book.pdo.php 和 PDO for MySQL http://php.net/manual/en/ ref.pdo-mysql.php

于 2010-03-21T08:54:44.500 回答