2016-07-25 3 views
0

항목 목록을 요청하는 MySQL 쿼리가 있습니다.PHP : 모든 항목을 루핑하는 대신 첫 번째 항목을 반복하는 루프?

내가 가져 와서 for 루프 ()를 사용하여 모든 항목을 표시하려고하지만 모든 항목 대신 첫 번째 항목 만 반복하여 표시합니다.

왜?

<?php 

$conectar = mysqli_connect(HOST, USER, PASS, DATABASE); 
$query = " SELECT cursoID, nombreCurso, estadoCurso 
      FROM cursos 
      WHERE estadoCurso='abierto'"; 
$buscarCurso = mysqli_query($conectar,$query); 
$curso=mysqli_fetch_assoc($buscarCurso); 
$totalRows = mysqli_num_rows($buscarCurso); //There are 3 rows of results 

echo $totalRows; 

for ($i=0; $i < $totalRows; $i++) { 
    echo '<br>'; 
    echo $curso['nombreCurso']; 
    echo '<br>'; 
} 
?> 

의도 된 결과는 다음과 같습니다

Curso 1

Curso 2

Curso 3

대신 내가 얻을

Curso 1

Curso 1

Curso 1

+0

추가 print_r ($ curso); 'for' 루프 전에 먼저 $ curso [ 'nombreCurso'] 필드가 무엇인지 살펴보십시오. –

+4

PHP 문서에서 설명한대로하지 않는 이유는 무엇입니까? 네가 그랬듯이, 그것은 사실 잘못되었다. 결과 집합에서 앞으로 나아갈 수 없습니다. – trincot

+0

하나의 행을 리턴하는 연관된 배열을 반입 중입니다. 'for' 대신'while ($ row = mysqli_fetch_assoc ($ buscarCurso)) {... echo stuff ...}'행 수를 얻을 필요가 없습니다. –

답변

7

루프는 모든 반복에 결과 세트에서 가져 오는되어야한다. 합니다 (PHP documentation에 주어진 많은 예에서와 같이) 표준 방법은 당신이 while 상태에서이 작업을 수행 할 것입니다 :

$totalRows = mysqli_num_rows($buscarCurso); //There are 3 rows of results 
echo $totalRows; 
while ($curso=mysqli_fetch_assoc($buscarCurso)) { 
    echo '<br>'; 
    echo $curso['nombreCurso']; 
    echo '<br>'; 
} 
+0

감사합니다! 그것은 작동합니다! 하지만 루프가 2 번 반복되는 것처럼 보입니다. 마무리하는 데 걸리는 시간보다 1 회는 짧습니다. – Rosamunda

+0

루프 외부에서 mysqli_feth_assoc를 호출하는 원래의 행을 제거해야합니다. – trincot

+0

나는 고마워! – Rosamunda

0

쿼리 결과에 대한 루프가 필요합니다. 이 경우 하나의 결과 만 얻고 그 결과를 3 번 ​​반복합니다.

<?php 
while($curso = mysqli_fetch_assoc($buscarCurso)) { 

    // Do some stuff 
    echo '<br />' . $curso['nombreCurso'] . '<br />'; 
} 
?> 
0
이 코드

<?php 

$conn = mysqli_connect(HOST, USER, PASS, DATABASE); 


$select_cursos = $conn->prepare(" SELECT 
    cursoID, nombreCurso, estadoCurso 
    FROM cursos 
    WHERE estadoCurso = ? ORDER BY nombreCurso ASC 
"); 

$select_cursos->bind_param('s', $nombreCurso); 

$nombreCurso = 'abierto'; // This you can get from a $_POST too 

if (!$select_cursos->execute()) { // ERROR 

    echo('Error'); 

} else { // OK 
    $select_cursos_result = $select_cursos->get_result(); 
    $select_cursos_count = select_cursos_result->num_rows; 

    echo('Found: '.$select_cursos_count); 

    if ($select_cursos_count > 0) { 
     while ($data = $select_cursos_result->fetch_assoc()) { 
      echo ($data['nombreCurso'].'<br>'); 
     } 
    } else { 
     echo ('No data!!'); 
    } 
} 

?> 

건배를 확인보다 블록 SQL 주입에 대한

먼저 사용 준비된 문장!

+0

사람들이 좋아하지 않는 완전한 대답 !! :디 –

관련 문제