2010-05-23 68 views
3

我有一個關於PHP類的問題。我想通過PHP獲取Mysql的結果。我想知道是否最佳做法是在類中顯示結果或存儲結果並將其處理爲html。PHP回聲查詢結果在Class中?

例如,類

class Schedule { 
      public $currentWeek; 

      function teamQuery($currentWeek){ 

      $this->currentWeek=$currentWeek; 


      } 
      function getSchedule(){ 
       $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS); 
        if (!$connection) { 
         die("Database connection failed: " . mysql_error()); 
        } 

        $db_select = mysql_select_db(DB_NAME,$connection); 
        if (!$db_select) { 
         die("Database selection failed: " . mysql_error()); 
        } 

        $scheduleQuery=mysql_query("SELECT guest, home, time, winner, pickEnable FROM $this->currentWeek ORDER BY time", $connection); 

        if (!$scheduleQuery){ 
         die("database has errors: ".mysql_error()); 
          } 


        while($row=mysql_fetch_array($scheduleQuery, MYSQL_NUMS)){ 
        //display the result..ex: echo $row['winner']; 

        }  
        mysql_close($scheduleQuery); 

        //no returns 
        } 


     } 

或者返回查詢結果作爲一個變量,在PHP處理這裏

class Schedule { 
      public $currentWeek; 

      function teamQuery($currentWeek){ 

      $this->currentWeek=$currentWeek; 


      } 
      function getSchedule(){ 
       $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS); 
        if (!$connection) { 
         die("Database connection failed: " . mysql_error()); 
        } 

        $db_select = mysql_select_db(DB_NAME,$connection); 
        if (!$db_select) { 
         die("Database selection failed: " . mysql_error()); 
        } 

        $scheduleQuery=mysql_query("SELECT guest, home, time, winner, pickEnable FROM $this->currentWeek ORDER BY time", $connection); 

        if (!$scheduleQuery){ 
         die("database has errors: ".mysql_error()); 
        // create an array } 
        $ret = array(); 

        while($row=mysql_fetch_array($scheduleQuery, MYSQL_NUMS)){ 

        $ret[]=$row; 
        }  
        mysql_close($scheduleQuery); 

        return $ret; // and handle the return value in php 
        } 


      } 

兩件事情裏面顯示的結果:

  1. 我發現在PHP中返回的變量有點複雜,因爲它是二維數組。我不確定最佳做法是什麼,並且想問專家的意見。

  2. 每次創建一個新的方法,我必須重新創建$連接變量:見下文

    $連接的mysql_connect =(DB_SERVER,DB_USER,DB_PASS);如果(!$ connection){ die(「Database connection failed:」。mysql_error()); }

        $db_select = mysql_select_db(DB_NAME,$connection); 
            if (!$db_select) { 
             die("Database selection failed: " . mysql_error()); 
            } 
    

這似乎是多餘的給我。我可以只做一次,而不是隨時調用我需要的查詢嗎?我是新來的PHP類。希望你們能幫助我。謝謝。

回答

2

我將這些類視爲'訪問器',因此它們純粹查詢數據庫並返回結果。這樣,任何調用它的PHP代碼都可以做任何它喜歡的事情。這可能是顯示,或者它可能是一個支票,或者它可能是一個更新。這是一個很好的設計,因爲它將數據存儲與顯示的邏輯分開,並且意味着您的代碼將更加靈活。但是,是的,這有點複雜。

關於每次重新創建連接。這可能或可能不是必需的。根據您的設置,您可能可以創建連接池。爲了讓你現在更容易,你可以將連接的創建抽象爲它自己的方法。這樣你只需要在開始時調用這個方法來獲得連接句柄。這可以讓您避免在同一地點使用相同代碼的多個副本。

如果你是PHP新手,我建議在面向對象設計方面做一些研究。這會給你一個想法,爲什麼抽象一些函數會有好處,以及爲什麼你想返回結果而不是顯示它們。

+0

我只是厭倦了處理二維數組,但我會按照你的建議。非常感謝。 – FlyingCat 2010-05-23 22:10:33

+0

謝謝傑瑞。我也同意prodigitalson,它會更好地使用PDO。另一個建議擺脫二維數組,是創建與數據庫表匹配的類,然後只要獲得二維數組,就可以實例化並返回一個包含結果的類。這使得處理結果變得更加容易和更加標準化,儘管創建額外類的工作有相當多的工作量等。如果您查看PDO提取函數,它甚至可以爲您實例化,而不處理2D數組。或者,看看cakePHP ...太多選項:)祝你好運:) – Jacob 2010-05-23 22:23:51

1

它可能是一個糟糕的主意,以回聲的結果在他的類nstead你應該返回結果或結果集回聲其他地方。

可以在連接類等的mebmer:

protected $_connection = null;

然後在你的構造函數,你可以分配數據庫連接。雖然通常你的數據庫連接會被另一個類包裝。

此外,如果我是你我不會使用mysql函數。而應使用Mysqli或PDO_Mysql驅動程序。它們默認以對象方式封裝所有這些功能。然後,您可以使用自定義功能擴展這些類,而不是從頭開始。

+0

謝謝prodigitalson。我也會檢查你的建議。 – FlyingCat 2010-05-23 22:11:27

+1

你們倆都給了我很好的回覆。既然你已經有6K了。我會把我接受的答案給雅各布。謝謝。 :D – FlyingCat 2010-05-23 22:12:35

+0

@jerry:哈哈......我以爲我是唯一那樣做的人:-P – prodigitalson 2010-05-24 02:04:23