2013-06-18 5 views
2

이 오류가 발생하는 이유를 이해할 수 없습니다. 내가 볼 수 있듯이 내가 올바르게 사용하는 함수는 데이터베이스에있는 데이터 배열을 반환합니다. 배열의 각 데이터를 에코하려면 foreach()을 사용하지만 오류 : Warning: Invalid argument supplied for foreach()이 표시됩니다.배열을 사용할 때 foreach 오류에 대한 잘못된 인수 가져 오기

// Retrieve posts 
    function retrieve_posts(){ 
     // start new instance of the database connection 
     global $dbh; 

     // Get all the posts 
     $stmt = $dbh->prepare("SELECT * FROM jacks_barbers_reviews ORDER BY date DESC"); 
     $stmt->execute(); 

     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 

       $result[] = $row; 
     } 

     return $result; 
    } 

그리고 간체 foreach 루프 :

<?php 

     $posts = retrieve_posts(); 


      foreach($posts AS $index){ 

       echo '<div class="test-wrap">'; //contains the individual testimonials 
       echo '<p>' . $index['post'] . '</p>'; 
       echo '<p style="float:right;font-style:normal;font-size:15px;">By ' .$index['name']. ' ' .$index['date']. '</p>'; 
       echo '<div style="clear:both"></div>'; 
       echo '</div>'; // closes test-wrap 
      } 


    ?> 

는 그래서이 오류를 일으키는 여기

함수인가?

감사합니다.

+3

SQL 쿼리에서 게시물을 검색하지 않으면 $ result가 정의되지 않았기 때문에 함수에서 null이 반환됩니다. retrieve_posts()에있는 while 루프 앞에 빈 배열로 정의하십시오. –

+0

@MarkBaker : exactly – ducin

+0

모든 행을 얻기 위해'return $ stmt-> fetchAll()'을하는 것은 어떻습니까? post와 name이 실제로 jacks_barbers_reviews의 컬럼 인 한'foreach'에 대해서는 아무런 문제가 없습니다. '*'를 사용하지 마십시오. – Sylwester

답변

6

결과가없는 경우 이런 일이 발생할 수 있습니다. retrieve_posts 함수에서 $result 변수를 초기화하지 않았습니다. Null이 반환되고 이것은 foreach 루프 내에서 반복 될 수있는 허용 값이 아닙니다.

while 루프 앞에 변수 $result = array();을 초기화 해보십시오.

편집 : foreach는 official PHP docs에서 살펴 보자 : 당신이 그것을 초기화하지 않은 경우

The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects

, 당신은 객체 나 배열도 아닌 null 값을 반환합니다.

+1

그걸 사용하기 전에 내 배열을 초기화하지 않아도된다는 것을 가르쳐 줄 것입니다. 감사. – crm

+1

btw, 무엇이 $ sth-> fetchAll(); – Pinoniq

+1

@crm : 이것은 파이썬과 비교하여 PHP의 주요 약점입니다. 당신이 이상한 (또는 심지어 완전히 잘못된) 것을 쓴다면, PHP 통역사는 종종 당신이 의미하는 바를 알아 내려고 노력할 것입니다. 그리고 이러한 상황이 발생합니다. – ducin

관련 문제