2010-05-23 10 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 
        } 


     } 

또는 여기

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에서 처리 내부 디스플레이 결과 :

  1. I을 PHP에서 반환 된 변수는 2 차원 배열이므로 재생하기가 다소 복잡하다는 것을 알았습니다. 모범 사례가 무엇인지 잘 모르고 전문가 의견을 묻고 싶습니다.

  2. 나는 새로운 방법을 만들 때마다, 나는 $ 연결 변수를 다시 만들어야 :

    $ 연결 =로 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 클래스에 익숙하지 않다. 너희들이 나를 도울 수 있기를 바랍니다. 감사.

답변

2

나는 이러한 클래스를 '접근 자'로 취급하므로 순수하게 데이터베이스에 쿼리하고 결과를 반환합니다. 그런 식으로 호출하는 PHP 코드는 원하는 모든 것을 할 수 있습니다. 이 표시 될 수 있습니다 또는 수 있습니다 수표 또는 업데이트 수 있습니다. 이것은 데이터 저장소와 디스플레이의 로직을 분리하고 코드가 더욱 유연 해지기 때문에 좋은 디자인입니다. 그러나 그렇습니다, 그것은 조금 더 복잡합니다.

매번 연결을 다시 만드는 것에 관해서. 이것은 필요하지 않을 수도 있습니다. 설정에 따라 연결 풀을 만들 수 있습니다. 지금 당장 더 쉽게 사용할 수 있도록하기 위해 자체 메서드에 대한 연결 만들기를 추상화 할 수 있습니다. 이 방법을 사용하면 시작시 연결 핸들을 얻기 위해이 메서드를 호출하기 만하면됩니다. 이렇게하면 같은 코드의 복사본을 여러 곳에 보관할 필요가 없습니다.

PHP 수업을 처음 사용하는 경우 객체 지향 디자인에 대한 연구를하는 것이 좋습니다. 이렇게하면 일부 기능을 추상화하는 것이 왜 유익한 지, 결과를 표시하는 대신 결과를 반환하려는 이유에 대한 아이디어를 얻을 수 있습니다.

+0

저는 2 차원 배열을 다루는 것에 질 렸습니다. 그러나 나는 당신의 제안을 따를 것입니다. 고마워. – FlyingCat

+0

Jerry에게 감사드립니다. 나는 또한 PDD를 사용하는 것이 더 좋을 것이라고 prodigitalson에 동의한다. 2D 배열에서 벗어나기위한 또 다른 제안은 데이터베이스 테이블과 일치하는 클래스를 작성한 다음 2D 배열을 얻 자마자 결과를 사용하여 클래스를 인스턴스화하고 리턴 할 수 있다는 것입니다. 이렇게하면 결과를 더 쉽고 표준화 된 방식으로 처리 할 수 ​​있습니다. 추가 수업 등을 만드는 데는 약간의 작업이 있지만 PDO 가져 오기 기능을 살펴보면 2D 배열을 처리하지 않고도 인스턴스화를 수행 할 수 있습니다. 양자 택일로, cakePHP보세요 ... 너무 많은 옵션 :) 행운을 빌어 요 :) – Jacob

1

결과를 반향 출력하는 것이 좋지 않을 수도 있습니다. 클래스를 nstead하면 결과 또는 결과 집합을 반환해야합니다.

연결 같은 클래스의 mebmer 수 :

protected $_connection = null;

는 그런 다음 생성자에서 당신은 데이터베이스 연결을 할당 할 수 있습니다. 일반적으로 db 연결은 또 다른 클래스로 래핑됩니다.

또한 내가 당신이라면 mysql 기능을 사용하지 않을 것입니다. 대신 Mysqli 또는 PDO_Mysql 드라이버를 사용하십시오.그것들은 기본적으로 객체 지향 방식으로 모든 기능을 캡슐화합니다. 그런 다음 처음부터 작업하는 대신 사용자 정의 기능을 사용하여 해당 클래스를 확장 할 수 있습니다.

+0

감사합니다. 나는 너의 제안을 너무 체크 아웃 할 것이다. – FlyingCat

+1

둘 다 나에게 좋은 답장을 보냈습니다. 당신은 이미 6K를 가지고 있기 때문에. 나는 야곱에게 나의 대답을 줄 것이다. 감사. : D – FlyingCat

+0

@ 제리 : 하하 ... 나는 그걸 한 유일한 사람이라고 생각했다 .- P – prodigitalson