Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:For循环重复第一项而不是遍历所有项?_Php_Mysql_For Loop - Fatal编程技术网

PHP:For循环重复第一项而不是遍历所有项?

PHP:For循环重复第一项而不是遍历所有项?,php,mysql,for-loop,Php,Mysql,For Loop,我有一个MySQL查询,它请求一个项目列表 我为它们提取数据,并希望用for循环显示每个项目,但它只显示重复的第一个项目,而不是每个项目。 为什么? 预期结果是: 库索1 库索2 库索3 相反,我得到了 库索1 库索1 Curso 1您的循环应该从每次迭代的结果集中获取。标准方法(如中给出的许多示例)是在while条件下执行此操作: $totalRows = mysqli_num_rows($buscarCurso); //There are 3 rows of results echo $

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

我为它们提取数据,并希望用for循环显示每个项目,但它只显示重复的第一个项目,而不是每个项目。

为什么?


预期结果是:

库索1

库索2

库索3

相反,我得到了

库索1

库索1


Curso 1

您的循环应该从每次迭代的结果集中获取。标准方法(如中给出的许多示例)是在
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>'; 
}
$totalRows=mysqli_num_rows($buscarCurso)//共有3行结果
echo$totalRows;
而($curso=mysqli_fetch_assoc($buscarCurso)){
回声“
”; echo$curso['nombreCurso']; 回声“
”; }
查询结果需要一个循环。在本例中,您将只得到一个结果,并在该结果中循环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!!');
    }
}

?>


干杯

添加打印资源($curso);在执行
for
循环之前,首先查看$curso['nombreCurso']字段上的内容?为什么不按照PHP文档中的说明执行此操作?当你这样做的时候,它确实是错的。您不会在结果集中向前移动,而是获取一个关联的数组,该数组返回一行。你应该说,
while($row=mysqli\u fetch\u assoc($buscarCurso)){…echo stuff…},而不是
for
你不需要获得行数,在询问之前似乎没有做过多少研究。非常感谢。它起作用了!但似乎循环两次,我的意思是比完成所需时间少一次。你必须删除循环外调用
mysqli\u feth\u assoc
的原始行。完整回答人们不喜欢的问题!!:D
<?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!!');
    }
}

?>