作者LaPass (LaPass)
看板PHP
標題Re: [請益] 使用連接資料庫的CLASS,效率會不會較慢
時間Tue Sep 18 22:58:04 2012
※ 引述《PTTLSboy (阿銫)》之銘言:
: 目前是使用一個CLASS,專門用來連接資料庫及一些mysql函式
: 1.假設當有一筆資料要新增: (註:db_mysql是我的class)
: $test_insert=new db_mysql("insert into ... "); //處理SQL
: $test_insert->close(); //關閉連接
: unset($test_insert);//釋放記憶體
覺得用class去管資料庫,不應該是這樣
因為這樣寫,會導致一條SQL就開一條連線
我比較常看到的方法是這樣:
$DBLink = new DBLink();
開啟連線
$insert1 = $DBLink->getSQL("insert into ....");
$insert2 = $DBLink->getSQL("insert into ....");
$insert3 = $DBLink->getSQL("insert into ....");
......
一堆SQL操作
$DBLink->close();
關閉連線
不知道PHP有沒有連接池之類的東西
有的話,處理方式又不一樣了
: 當要做SELECT或是其他的動作又要再來一輪,每一次都宣告一個CLASS
: 的記憶體然候做完再釋放
: 2.如果是用function把連接資料庫的程式碼包起來 ($connection= ... 略)
: $query="insert to ...";
: $result=mysql_query($query,$connection);
: mysql_close($connection);
: 這樣直接執行,效率會不會比較高,電腦書上是教這種方法
: ---------------------------------------------------------
: 因為目前公司案子是用CLASS連接的寫法,所以一直有此疑問,哪個效率上較好
: 請問各位前輩都是用什麼方法寫的呢?
: 感謝看完!!
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.38.87.167
推 PTTLSboy:請問這樣還有辦法單獨關閉$insert1~3其中一條SQL嗎? 09/18 23:16
→ LaPass:應該是可以直接關$insert1之類的result,雖然我不常用php, 09/18 23:36
→ LaPass:但這種從底層實現上去的東西,應該不會差太多。 09/18 23:37
推 PTTLSboy:嗯嗯,感謝! 看來CLASS該重新設計過 09/18 23:56
→ gname:考慮 singleton 嗎? 09/19 09:11
→ MOONRAKER:unbuffered_query就不需要關閉了。就算只是普通的query 09/19 10:51
→ MOONRAKER:也還可以free_result()。事實上insert的傳回成本也就是 09/19 10:53
→ MOONRAKER:一個bool而已。我認為這完全是想太多。 09/19 10:54
→ LaPass:主要是針對SELECT的時候..... 09/19 12:18
→ LaPass:資料庫會卡在那邊等你要資料..... 09/19 12:18