2014-10-13 2 views
0

나는 oop 스타일의 초보자입니다. 지난주부터 연습을 시작하고 간단한 CRUD 웹 사이트를 만듭니다. 하지만 난 문제가있어 mysql 데이터베이스에서 행을 가져 오려고했을 때 항상 1 행을 표시합니다. PHP를 사용하여 MySQL에서 여러 행을 표시하는 방법?

내라는 클래스 class.user.php

을 만들어 그리고 여기 보여줍니다

include "db_config.php"; 

class User{ 


    private $db; 
    public function __construct(){ 
     $this->connect(); 

     } 
     private function connect($db_connect=true){ 
      if ($db_connect){ 
       $this->db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 
       if(mysqli_connect_errno()) {   
        printf("DB Connect failed: %s\n", mysqli_connect_error()); 
        exit; 
      } 
     }  
    } 
    public function get_tutoriallist(){ 
     $db = $this->db; 
     if(empty($db)){ 
      $this->connect(); 
      $db = $this->db; 
     } 
     try { 

      $stmt = $this->db->prepare('SELECT * FROM `topic`'); 
      $stmt->execute(); 
      $result = $stmt->get_result(); 
      $dataArray = array(); 
      while($row = $result->fetch_assoc()){ 
       $count_row = $result->num_rows; 
       if ($count_row == 1) { 
       $dataArray[] = $row; 
       } 
      } 
      return ($dataArray); 

      mysqli_close($db); 
      $this->db = null; 
     } catch (Exception $e) { 
      echo $e->errorMessage(); 
     } 

    } 
} 

그리고 난이 사용하여 전화 : 당신이 추가되기 때문에

$data = $user->get_tutoriallist(); 
         if (!empty($data)) { 
          foreach ($data as $row){  
           echo "<tr>";  
           echo"<td>".$row['category']."</td>"; 
           echo"<td>".$row['title']."</td>"; 
           echo"<td>".$row['detail']."</td>"; 
           echo"<td>".$row['photo']."</td>"; 
           echo"<td>".$row['video_link']."</td>"; 
           echo"<td>".$row['date_post']."</td>"; 
           echo"<td class='option'><center><a href ='#' class='edit'>Edit</a> 
            &nbsp;<a href='#'>Delete</a></center></td>";          
           echo "</tr>"; 
          } 
         }else{ 
           echo '<tr><td colspan="6"><center><h2>No entries</h2></center></td></tr>'; 
         } 
+0

이 질문은 귀하의 입장에서 순수한 무지로 보입니다. 게시하기 전에 코드를 올바르게 확인하십시오. – Vickrant

답변

0

내가 여기에 무슨 일이 일어나고 있는지 아주 확실하지 않다 :

 while($row = $result->fetch_assoc()){ 
      $count_row = $result->num_rows; 
      if ($count_row == 1) { 
      $dataArray[] = $row; 
      } 

을하지만 일반적으로, 당신은 단지 결과를 반복하고 배열에 추가하십시오 :

 while($row = $result->fetch_assoc()){ 
      $dataArray[] = $row; 
      } 

그러면 $datArray에 모든 행이 있습니다.

+0

오, 왜 내가 단 하나의 행을 가지고. 나는 그것을 더 일찍 알아 차리지 못했다. 큰 thaks Latheesan과 Fluffef .. :) –

0

이것은 결과 배열은 $current_row == 1 일 때만 가능합니다.

이처럼 while 루프를 변경해보십시오 :

while($row = $result->fetch_assoc()){ 
    $dataArray[] = $row; 
} 

는 또한, 당신은 당신이 절차 mysqli의 기능을 OOP 스타일을 혼합되어, 올바르게 DB 연결을 종료되지 않습니다. 다음과 같아야합니다.

$this->db->close(); 
$this->db = null; 

마지막으로 연결을 닫은 후에 데이터 배열을 반환해야합니다. 데이터 배열을 먼저 반환하고 연결을 닫은 경우 해당 코드가 실행되지 않습니다.

그래서 마지막 세 줄은 다음과 같아야합니다

$this->db->close(); 
$this->db = null; 
return $dataArray; 
+0

정답 @Latheesan – Vickrant

관련 문제