2012-07-17 86 views
1

我一直在挖掘堆棧和各種其他網站尋找我的問題的最佳答案。MySQLi Bulk在大型網站上準備好的語句?

我開發一個非常龐大且不斷增長的怪物一個網站,在信息管理系統的形式。它的核心是運行PHP和MySQL。我只是更新了代碼,更一般的意義上,mysqli,但沒有充分利用所有功能。這是我現在正在工作的一部分。

我讀了每噸準備好的語句,這是我肯定需要投入使用因爲得到重新使用的語句的數量。

  • 我期待在約200個不同的頁面中使用約50條準備的語句, 。有沒有推薦的 方式來做到這一點?我見過的所有例子都處理了1或2.
  • 由於網站的性質不斷增加,使用數據庫等,我喜歡以前的mysql的一件事是它 不需要連接爲每個查詢指定,但與 mysqli。由於這個原因,我不得不調整我的功能。推薦的解決方案是否有 ?

我以過程形式建立網站,而不是面向對象,但我總是樂於接受建議,無論他們使用何種格式。

+0

難道只是我或者你似乎對準備好的陳述以及與數據庫連接的工作方式有些混淆?不要誤解我的意思,我很樂意幫助你解決困惑,但是a)我不夠專業,最重要的是b)它不適合SO的答案。 – Adi 2012-07-17 15:36:11

+0

你可能是完全正確的!因此我的問題發佈在這裏。如果準備好的陳述不是我應該看的,我全都聽過。 – user1532189 2012-07-17 16:55:05

回答

0

我會嘗試儘可能準確,但我不是專家。

  • 你的第一點:你可能在尋找Stored Procedures。基本上你可以存儲你的應用程序的某些邏輯重複使用。

    Prepared Statements,但是,是不同的。他們基本上是指「解析一次,執行很多次」,但它們不存儲在服務器上並通過連接進行。

    在PHP中,每一個「頁面加載」是一個不同的線程有自己的變量,因此它與數據庫的連接,所以你不能真的再次使用Prepared Statement

  • 至於你的第二點,mysql_query()不需要傳遞給它的連接句柄,因爲它假定你想使用上次創建的連接。

例如:

mysql_connect(); 
mysql_query("SELECT * FROM table"); 

$link = mysql_connect(); 
mysql_query("SELECT * FROM table", $link); 

是相同的。
因此,隱式使用連接並不意味着可伸縮性。

這是因爲據我可以不提供可能是錯誤的信息寫的,所以我強烈建議你真正瞭解這一點,然後如果你有一些這裏的問題每個人都會很樂意回答。

+0

感謝您清理存儲過程與準備好的語句。至於MySql_query,我知道這是一個聲明連接的選項,我喜歡。最後,我將着眼於結合存儲過程和準備好的語句。 – user1532189 2012-07-17 17:20:35