mysql_pconnect() acts very much like mysql_connect() with two major differences. First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection. 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()).
永久连接很少用耶
说明你们公司的前辈可能不精通php
mysql连接资源防到其中,如果你用pconnect,其实就是每次连接,它都会到这个
连接池中去找有没有可用的连接,如果没有找到,它就新开一个,
如果已经有人用过的可用连接,pconnect就不会再创建新连接了,而直接用这个可用的连接了.
如果你用connect,则你必须自己负责创建和销毁连接了.
其实综合看起来,如果大家都用pconnect,是一种比较好的形式.
连接数与人多人少无关,当有 N 个人连接时,不论用 pconnect 还是 connect,最多都只有 N 个连接。
只有在一种情形下,connect 优于 pconnect:你的脚本要执行很长时间 T1,其中只有开始的一小段时间 T2 需要用到数据库。这样,如果用 connect,而且用完后立即 close,则从总体上会减少数据库连接数。因为 pconnect 建立的连接,只有当脚本结束后才能标记为“空闲”,也只有标记为“空闲”的连接,才能被下一个脚本使用。如果同时运行的脚本数巨多,而且所有的脚本都一样,那么可以有一个近似公式:NC / NS = T2 / T1其中 NC 是总连接数,NS 是总脚本数。可见,时间比例被等效成了数量的比例。假如 T2 = T1 * 0.1,那么近似有NC = NS * 0.1效果明显!问题是:这种情况好像很少见。
挺方便,我都快忘了怎么连数据库了:)
class sql_db
{ var $db_connect_id;
var $query_result;
var $row = array();
var $rowset = array();
var $num_queries = 0; //
// Constructor
//
function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
{ $this->persistency = $persistency;
$this->user = $sqluser;
$this->password = $sqlpassword;
$this->server = $sqlserver;
$this->dbname = $database; if($this->persistency)
{
$this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
}
else
{
$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
}
if($this->db_connect_id)
{
if($database != "")
{
$this->dbname = $database;
$dbselect = @mysql_select_db($this->dbname);
if(!$dbselect)
{
@mysql_close($this->db_connect_id);
$this->db_connect_id = $dbselect;
}
}
return $this->db_connect_id;
}
else
{
return false;
}
} //
// Other base methods
//
function sql_close()
{
if($this->db_connect_id)
{
if($this->query_result)
{
@mysql_free_result($this->query_result);
}
$result = @mysql_close($this->db_connect_id);
return $result;
}
else
{
return false;
}
} //
// Base query method
//
function sql_query($query = "", $transaction = FALSE)
{
// Remove any pre-existing queries
unset($this->query_result);
if($query != "")
{
$this->num_queries++; $this->query_result = @mysql_query($query, $this->db_connect_id);
}
if($this->query_result)
{
unset($this->row[$this->query_result]);
unset($this->rowset[$this->query_result]);
return $this->query_result;
}
else
{
return ( $transaction == END_TRANSACTION ) ? true : false;
}
} //
// Other query methods
//
function sql_numrows($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
$result = @mysql_num_rows($query_id);
return $result;
}
else
{
return false;
}
}
function sql_affectedrows()
{
if($this->db_connect_id)
{
$result = @mysql_affected_rows($this->db_connect_id);
return $result;
}
else
{
return false;
}
}
function sql_numfields($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
$result = @mysql_num_fields($query_id);
return $result;
}
else
{
return false;
}
}
function sql_fieldname($offset, $query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
$result = @mysql_field_name($query_id, $offset);
return $result;
}
else
{
return false;
}
}
function sql_fieldtype($offset, $query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
$result = @mysql_field_type($query_id, $offset);
return $result;
}
else
{
return false;
}
}
function sql_fetchrow($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
$this->row[$query_id] = @mysql_fetch_array($query_id);
return $this->row[$query_id];
}
else
{
return false;
}
}
function sql_fetchrowset($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
unset($this->rowset[$query_id]);
unset($this->row[$query_id]);
while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
{
$result[] = $this->rowset[$query_id];
}
return $result;
}
else
{
return false;
}
}
function sql_fetchfield($field, $rownum = -1, $query_id = 0)
{
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
if($rownum > -1)
{
$result = @mysql_result($query_id, $rownum, $field);
}
else
{
if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
{
if($this->sql_fetchrow())
{
$result = $this->row[$query_id][$field];
}
}
else
{
if($this->rowset[$query_id])
{
$result = $this->rowset[$query_id][$field];
}
else if($this->row[$query_id])
{
$result = $this->row[$query_id][$field];
}
}
}
return $result;
}
else
{
return false;
}
}
function sql_rowseek($rownum, $query_id = 0){
if(!$query_id)
{
$query_id = $this->query_result;
}
if($query_id)
{
$result = @mysql_data_seek($query_id, $rownum);
return $result;
}
else
{
return false;
}
}
function sql_nextid(){
if($this->db_connect_id)
{
$result = @mysql_insert_id($this->db_connect_id);
return $result;
}
else
{
return false;
}
}
function sql_freeresult($query_id = 0){
if(!$query_id)
{
$query_id = $this->query_result;
} if ( $query_id )
{
unset($this->row[$query_id]);
unset($this->rowset[$query_id]); @mysql_free_result($query_id); return true;
}
else
{
return false;
}
}
function sql_error($query_id = 0)
{
$result["message"] = @mysql_error($this->db_connect_id);
$result["code"] = @mysql_errno($this->db_connect_id); return $result;
}} // class sql_db} // if ... define?>
http://www.csdn.net/expert/topic/974/974756.xml?temp=.9171411
http://www.csdn.net/expert/topic/974/974756.xml?temp=.9171411
如果pconnect的话,当服务器过载时,会出现连接数不够的情况,而导致页面无法访问。而使用connect,每次用完都加上close的话,只会拖慢访问速度,而不会出现连结数不够的error页面,除非当你的服务器严重超载,才会什么页面都卡看不到。pconnect开发中稍微方便些,但是对于访问量稍大一点的站点,建议使用connect。