2012-03-08 49 views
1

我有一個網頁,有一些mysql查詢, 我必須在每個查詢之後啓動新的數據庫連接和數據庫關閉,或者更有效地在代碼頂部啓動一個數據庫連接並關閉腳本底部? 謝謝!PHP/MySQL:爲每個查詢創建新的連接?

+1

你如何看待自己? – 2012-03-08 21:14:43

回答

5

從不爲每個查詢創建一個新的連接;這是非常浪費的,並會使MySQL服務器負擔過重。

在腳本的頂部創建一個連接就足夠了 - 所有後續查詢將使用該連接直到頁面結束。您甚至可以在include()版本的腳本中使用該連接,並在其中調用mysql_connect()調用。

+2

希望他與PDO連接,而不是'mysql_ *':'$ dbh = new PDO($ dsn,$ user,$ password);' – webbiedave 2012-03-08 21:18:27

+0

@Bojangles仍然是PHP的新手,這對我非常感興趣。所以我有一個數據庫類與__CONSTRUCT功能使數據庫連接,分配給公共$連接。隨後我總是通過執行$ database-> connection-> query(「」)來進行調用。但我猜測我應該(在實例化類之後,並通過連接到數據庫),只需執行$ database-> query(「」);是? – 2014-06-18 18:56:33

+0

我必須做錯了什麼,因爲在實例化$ database = class database();我試圖不建立連接並直接進入$ database-> query(「」),但它不起作用,儘管我的__CONSTRUCT被設置爲進行連接 – 2014-06-18 21:20:11

0

只創建一個連接。您甚至不必手動關閉它。

+1

是否意味着如果您使用的是mysql_pconnect(),那麼您必須手動關閉連接? – 2012-03-08 21:17:20

+0

是的,你應該。 – ThiefMaster 2012-03-08 21:51:19

+1

不幸的是,你不能 – 2012-03-08 22:06:26

5

我更喜歡創建一些名爲Database的類,它在創建時將使用mysqli(OOP版本的mysql)創建數據庫連接。

這樣我就不用擔心了,我有一個靜態類可以訪問數據庫。

class MyAPI { 
    private static $database = false; 

    public static function GetDatabase() { 
     if (MyAPI::$database === false) { 
      MyAPI::$database = new Database(credentials can go here) 
     } 
     return MyAPI::$database; 
    } 
} 

現在用你的API和數據庫的includsion可以訪問數據庫和它的初始化代碼您的系統沒有圍繞取決於程序的哪一部分你的文件正在運行,數據庫/連接被充塞如果不需要,將不會被創建(僅在被調用之前)。


只是爲了好玩我也喜歡在我的Database類的功能,將執行查詢並返回結果,這樣我就不必在我的代碼,一遍又一遍具有相同的while循環再次取決於我打這些電話的位置。


我也忘了回答你的問題。沒有多個連接!它的baaaad。

0

多連接更適合安全和跟蹤。 如果您要通過前後臺之間的防火牆進行定義,將會出現超時定義,因此單個連接將成爲問題。 但是,如果您的Web服務器與mysql在同一主機上,則單個連接將更有效。

相關問題