我对PHP Class有疑问。我试图通过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
}
}
这里有两件事:
我发现php中返回的变量有点复杂,因为它是二维数组。我不确定最佳做法是什么,并想问你专家意见。
每次创建新方法时,我都必须重新创建$ 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类的新手。希望你们能帮助我。感谢。
答案 0 :(得分:2)
我将这些类视为“访问者”,因此他们纯粹查询数据库并返回结果。这样,任何调用它的PHP代码都可以随意使用它。这可能是显示或可能是支票或可能是更新。这是一个很好的设计,因为它将数据存储区与逻辑与显示区分开,这意味着您的代码将更加灵活。但是,是的,它有点复杂。
每次重新创建连接。这可能是也可能不是必要的。根据您的设置,您可以创建连接池。为了使您现在更容易,您可以抽象创建与其自己的方法的连接。这样,您只需在开始时调用此方法即可获得连接句柄。这样可以避免在整个地方拥有相同代码的许多副本。
如果您是PHP新手,我建议您对面向对象设计进行一些研究。这将让您了解为什么抽象某些函数是有益的,以及为什么要返回结果而不是显示结果。
答案 1 :(得分:1)
在类中回显结果可能是一个坏主意,你应该返回结果或结果集来回显其他地方。
可以连接类的mebmer,如:
protected $_connection = null;
然后在构造函数中,您可以分配数据库连接。虽然通常你的数据库连接会被另一个类包装。
此外,如果我是你,我不会使用mysql
功能。而是使用Mysqli或PDO_Mysql驱动程序。默认情况下,它们以对象方式封装所有这些功能。然后,您可以使用自定义功能扩展这些类,而不是从头开始。