2010-05-23 46 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