繁体   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