簡體   English   中英

PHP echo回顯結果在Class?

[英]PHP echo query result in Class?

我有一個關於PHP類的問題。 我試圖通過PHP從Mysql獲取結果。 我想知道最佳做法是在類中顯示結果還是存儲結果並在html中處理它。

例如,在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. 每次我創建一個新方法時,我都必須重新創建$ connection變量:見下文

    $ connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS); if(!$ connection){die(“數據庫連接失敗:”。mysql_error()); }

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

這對我來說似乎是多余的。 我可以只做一次,而不是在我需要查詢時隨時調用它嗎? 我是php類的新手。 希望你們能幫助我。 謝謝。

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

關於每次重新創建連接。 這可能是也可能不是必要的。 根據您的設置,您可以創建連接池。 為了使您現在更容易,您可以抽象創建與其自己的方法的連接。 這樣,您只需在開始時調用此方法即可獲得連接句柄。 這樣可以避免在整個地方擁有相同代碼的許多副本。

如果您是PHP類的新手,我建議您對面向對象設計進行一些研究。 這將讓您了解為什么抽象某些函數是有益的,以及為什么要返回結果而不是顯示結果。

在類中回顯結果可能是個壞主意,你應該返回結果或結果集來回顯其他地方。

可以連接類的mebmer,如:

protected $_connection = null;

然后在構造函數中,您可以分配數據庫連接。 雖然通常你的數據庫連接將由另一個類包裝。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM