持久连接和普通的连接这两种方式的区别众所周知,
可是它们之间有什么优缺点吗???
比如那个性能更好些??……
---------------------------------------------------------------
人少,就用pconn,人多,还是用conn
理论是这样吧
---------------------------------------------------------------
一般情况下都建议用mysql_pconnecct()
如果有很多通过不同的用户名和密码联结mysql的话,可以考虑用mysql_connect。因为mysql_connect可以关闭
楼上楼上的:
说明你们公司的前辈可能不精通php
---------------------------------------------------------------
在这里我解释以下普通连接和永久连接
普通连接就是我们每一次操作数据库,都重新建立连接。
永久连接是当我们第一次建立连接后,再次操作数据库时,将首先检测是否已经有了连接,如果有,不建立直接调用第一次建立的。
这样我认为,对于写程序经常忘记关闭连接的应当有好处。
---------------------------------------------------------------
在PHP的source code中,你会发现php自身会有一个大的memory,它会把每次的
mysql连接资源防到其中,如果你用pconnect,其实就是每次连接,它都会到这个
连接池中去找有没有可用的连接,如果没有找到,它就新开一个,
如果已经有人用过的可用连接,pconnect就不会再创建新连接了,而直接用这个可用的连接了.
如果你用connect,则你必须自己负责创建和销毁连接了.
其实综合看起来,如果大家都用pconnect,是一种比较好的形式.
---------------------------------------------------------------
mysql_connect: 脚本执行结束时,自动 close,而使用 mysql_close 是为了在脚本结束前提前 close, 所以一般用不着 mysql_close
mysql_pconnect: 执行时首先寻找一个已经打开的连接,若存在就直接使用,否则才创建一个新的连接
用 mysql_pconnect 较好,因为省略了很多重复的 close/connect 操作,速度可能更快。
连接数与人多人少无关,当有 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
效果明显!
问题是:这种情况好像很少见。
---------------------------------------------------------------
1
2class sql_db
3{
4
5var $db_connect_id;
6var $query_result;
7var $row = array();
8var $rowset = array();
9var $num_queries = 0;
10
11//
12// Constructor
13//
14function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
15{
16
17$this->persistency = $persistency;
18$this->user = $sqluser;
19$this->password = $sqlpassword;
20$this->server = $sqlserver;
21$this->dbname = $database;
22
23if($this->persistency)
24{
25$this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
26}
27else
28{
29$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
30}
31if($this->db_connect_id)
32{
33if($database != "")
34{
35$this->dbname = $database;
36$dbselect = @mysql_select_db($this->dbname);
37if(!$dbselect)
38{
39@mysql_close($this->db_connect_id);
40$this->db_connect_id = $dbselect;
41}
42}
43return $this->db_connect_id;
44}
45else
46{
47return false;
48}
49}
50
51//
52// Other base methods
53//
54function sql_close()
55{
56if($this->db_connect_id)
57{
58if($this->query_result)
59{
60@mysql_free_result($this->query_result);
61}
62$result = @mysql_close($this->db_connect_id);
63return $result;
64}
65else
66{
67return false;
68}
69}
70
71//
72// Base query method
73//
74function sql_query($query = "", $transaction = FALSE)
75{
76// Remove any pre-existing queries
77unset($this->query_result);
78if($query != "")
79{
80$this->num_queries++;
81
82$this->query_result = @mysql_query($query, $this->db_connect_id);
83}
84if($this->query_result)
85{
86unset($this->row[$this->query_result]);
87unset($this->rowset[$this->query_result]);
88return $this->query_result;
89}
90else
91{
92return ( $transaction == END_TRANSACTION ) ? true : false;
93}
94}
95
96//
97// Other query methods
98//
99function sql_numrows($query_id = 0)
100{
101if(!$query_id)
102{
103$query_id = $this->query_result;
104}
105if($query_id)
106{
107$result = @mysql_num_rows($query_id);
108return $result;
109}
110else
111{
112return false;
113}
114}
115function sql_affectedrows()
116{
117if($this->db_connect_id)
118{
119$result = @mysql_affected_rows($this->db_connect_id);
120return $result;
121}
122else
123{
124return false;
125}
126}
127function sql_numfields($query_id = 0)
128{
129if(!$query_id)
130{
131$query_id = $this->query_result;
132}
133if($query_id)
134{
135$result = @mysql_num_fields($query_id);
136return $result;
137}
138else
139{
140return false;
141}
142}
143function sql_fieldname($offset, $query_id = 0)
144{
145if(!$query_id)
146{
147$query_id = $this->query_result;
148}
149if($query_id)
150{
151$result = @mysql_field_name($query_id, $offset);
152return $result;
153}
154else
155{
156return false;
157}
158}
159function sql_fieldtype($offset, $query_id = 0)
160{
161if(!$query_id)
162{
163$query_id = $this->query_result;
164}
165if($query_id)
166{
167$result = @mysql_field_type($query_id, $offset);
168return $result;
169}
170else
171{
172return false;
173}
174}
175function sql_fetchrow($query_id = 0)
176{
177if(!$query_id)
178{
179$query_id = $this->query_result;
180}
181if($query_id)
182{
183$this->row[$query_id] = @mysql_fetch_array($query_id);
184return $this->row[$query_id];
185}
186else
187{
188return false;
189}
190}
191function sql_fetchrowset($query_id = 0)
192{
193if(!$query_id)
194{
195$query_id = $this->query_result;
196}
197if($query_id)
198{
199unset($this->rowset[$query_id]);
200unset($this->row[$query_id]);
201while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
202{
203$result[] = $this->rowset[$query_id];
204}
205return $result;
206}
207else
208{
209return false;
210}
211}
212function sql_fetchfield($field, $rownum = -1, $query_id = 0)
213{
214if(!$query_id)
215{
216$query_id = $this->query_result;
217}
218if($query_id)
219{
220if($rownum > -1)
221{
222$result = @mysql_result($query_id, $rownum, $field);
223}
224else
225{
226if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
227{
228if($this->sql_fetchrow())
229{
230$result = $this->row[$query_id][$field];
231}
232}
233else
234{
235if($this->rowset[$query_id])
236{
237$result = $this->rowset[$query_id][$field];
238}
239else if($this->row[$query_id])
240{
241$result = $this->row[$query_id][$field];
242}
243}
244}
245return $result;
246}
247else
248{
249return false;
250}
251}
252function sql_rowseek($rownum, $query_id = 0){
253if(!$query_id)
254{
255$query_id = $this->query_result;
256}
257if($query_id)
258{
259$result = @mysql_data_seek($query_id, $rownum);
260return $result;
261}
262else
263{
264return false;
265}
266}
267function sql_nextid(){
268if($this->db_connect_id)
269{
270$result = @mysql_insert_id($this->db_connect_id);
271return $result;
272}
273else
274{
275return false;
276}
277}
278function sql_freeresult($query_id = 0){
279if(!$query_id)
280{
281$query_id = $this->query_result;
282}
283
284if ( $query_id )
285{
286unset($this->row[$query_id]);
287unset($this->rowset[$query_id]);
288
289@mysql_free_result($query_id);
290
291return true;
292}
293else
294{
295return false;
296}
297}
298function sql_error($query_id = 0)
299{
300$result["message"] = @mysql_error($this->db_connect_id);
301$result["code"] = @mysql_errno($this->db_connect_id);
302
303return $result;
304}
305
306} // class sql_db
307
308} // if ... define
309
---------------------------------------------------------------
除非你很必要,否则不要用“永久连接”,尽量使用页面范围的连接,而不要使用会话和应用程序范围的连接方式。这个讨论在javascript也有一个,参考一下,