PHP:循环,重复第一个项目,而不是循环所有项目?
问题描述:
我有一个请求项目列表的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
答
你的循环应该从结果在每个迭代上设置来获取。标准方法(如在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>';
}
答
您需要查询结果的循环。在这种情况下,您只会得到一个结果,并通过该结果循环三次。
<?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!!');
}
}
?>
干杯!
+0
完整答案的人不喜欢! :d –
添加print_r($ curso);在'for'循环之前,先看看$ curso ['nombreCurso']字段上的内容? –
为什么不按照PHP文档中的描述来做呢?当你这样做的时候,这确实是错误的。你不会在结果集中前进。 – trincot
您正在提取一个关联数组,该数组返回一行。而不是'for',你应该说'while while($ row = mysqli_fetch_assoc($ buscarCurso)){... echo stuff ...}'你不需要得到一行数 –