2014-02-15 2 views
0

데이터베이스의 모든 행을 반복하여 사용자에게 표시하고 싶지만 출력 결과의 첫 번째 행만 가져옵니다. 여기 PDO를 사용하여 MySQL의 데이터를 가져 와서 반복하십시오.

내 코드 ::이다

쿼리 기능 :

public function query($sql, $params = array()) { 
    $this->_error = false; 
    if($this->_query = $this->_pdo ->prepare($sql)) { 
     $x = 1; 
     if(count($params)) { 
      foreach ($params as $param) { 
       $this->_query->bindValue($x,$param); 
       $x++; 
      } 
     } 

     if($this->_query->execute()) { 
      $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 
      $this->_count =$this->_query->rowCount(); 
      } else { 
       $this->_error = true; 
      } 

     } 
     return $this; 
    } 


public function results() { 
    return $this->_results; 
} 

내 쿼리 :

$search = DB::getInstance()->query("SELECT * FROM staff_info WHERE staff_id = ?",array(
Input::get('staff_id'))); 

if($search->count()){ 
if($search) { 
    $search_result = $search->results(); 
    foreach ($search_result as $val) { 
     $fname = $val->fname; 
     $surname = $val->surname; 
     $street = $val->street; 

     echo '<div class="table-responsive table-bordered"> 
     <table class="table"> 
     <tr> 
     <td><a href="index.php?ad=profile">'.$fname.'</a></td> 
     <td><a href="index.php?ad=profile">'.$surname.'</td> 
     <td><a href="index.php?ad=profile">'.$street.'</td> 
     </tr> 
     </table> 
     </div>'; 
    } 
} 

문제는 - 내가 첫 번째 행을 얻고있다 데이터베이스에 다른 행이 더 있더라도. 왜 이런 일이 일어나고 있는거야?

+1

당신도 이걸로 1 행을 얻는 지 궁금합니다! –

+0

나는 여기서 wats knats wats ..... 어떤 아이디어? – internally1

+0

[PDO :: query] (http://www.php.net/pdo.query) &'public function query()'&&'_query' 많은'query's'에 ??? –

답변

0

당신은 밑줄을 놓쳤습니다.

쿼리 함수에서 출력을 $this->_results에 저장합니다. 루핑하기 전에 변수 이름을 수정해야합니다. $search->_results.

+0

내 편집을보고, 결과를 반환하는 다른 함수를 사용했습니다. – internally1

0

prepare()의 PDO 방법을 사용하여 fetchAll() 또는 fetch()를 실행합니다 (&). 공지 사항 findAll()의 메소드를 PDO와 혼동하지 않도록 호출했습니다. fetchAll(). 다음 코드는 제 사용법을 기반으로합니다. 하나 개의 결과에 대한 모든 결과

public function findAll($sql,$param) { 
    $query = $this->dbh->prepare($sql); 
    if(is_array($param)){ 
     $query->execute($param);//1 parameter 
    }else { 
     $query->execute(array($param));// >1 parameters 
    } 
    $rows = $query->fetchAll(); 
     if($rows){ 
      return $rows; 
     } 
    } 
    } 

를 들어

클래스에서

당신이 하나 개의 레코드를 찾으려면

public function findOne($sql,$param) { 
     $query = $this->dbh->prepare($sql); 
     if(is_array($param)){ 
      $query->execute($param);//1 parameter 
     }else { 
      $query->execute(array($param));// >1 parameters 
     } 
     $row = $query->fetch(); 
      if($row){ 
       return $row; 
      } 
     } 
     } 

사용

$params=array(100,"AK"); 
$sql1 = "SELECT * FROM users WHERE id < ? AND state = ?"; 
$rows = $dao->findAll($sql,$params); 
foreach($rows as $row){//Remove for 1 result 
    echo $row['firstname']; 
    etc..... 

만이를 대체 할 수을 fetch()으로 바꾸고 새로운 방법으로 그냥 에코없이 foreach()

+0

근래 이런 식으로 시도했지만 ....하지만 여전히 하나의 레코드를 얻습니다.하지만 ** SELECT SQL *을 "SELECT * FROM users"로 변경하면됩니다. ** 나는 모든 결과를 얻습니다. – internally1

+0

귀하는 귀하의 질의로부터 하나의 결과 만 가져야합니다. [참조] (http://gleniffersystems.net46.net/pdotest/dynamicFunction1a.php) 내 데이터베이스 결과. –

+0

그건 내가 원하는 와트 ...하지만 난 몰라 난 단지 첫 번째 행을 .... 내가 데이터베이스 클래스를 볼 수 있습니까 ??? – internally1

관련 문제