PHP:For循环,它重复第一个项目,而不是循环所有项目


PHP: For loop that repeats the first item instead of looping through all items?

我有一个MySQL查询,它请求一个项目列表。

我为它们提取,并希望用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

您的循环应该在每次迭代中从结果集获取。标准的方法(如PHP文档中给出的许多示例)是在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>'; 
}

查询结果需要一个循环。在这种情况下,您将只得到一个结果,并循环该结果3次。

<?php
while($curso = mysqli_fetch_assoc($buscarCurso)) {
    // Do some stuff
    echo '<br />' . $curso['nombreCurso'] . '<br />';
}
?>

首先使用准备好的语句进行块SQL注入,而不是检查此代码

<?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!!');
    }
}
?>

干杯!!!