我遇到了一個有趣的問題,即使用一對選擇查詢和幾個連接從mysql表中檢索數據。MySQL PHP while循環 - 一個記錄比預期的要少返回
1)查詢:
$task_details = "SELECT tasks.task, ";
$task_details = $task_details . "tasks.description,";
$task_details = $task_details . "tasks.finishby, ";
$task_details = $task_details . "responsibles.full_name, ";
$task_details = $task_details . "task_assignments.completed, ";
$task_details = $task_details . "tasks.id, ";
$task_details = $task_details . "responsibles.user_id ";
$task_details = $task_details . "FROM tasks,task_assignments,responsibles ";
$task_details = $task_details . "WHERE ";
$task_details = $task_details . "tasks.id = task_assignments.id_task AND ";
$task_details = $task_details . "responsibles.id = task_assignments.id_assignee AND ";
$task_details = $task_details . "tasks.id = $id_task;";
$task_details_q = mysql_query($task_details) or die(mysql_error());
1a)中得到的示例查詢:
SELECT tasks.task, tasks.description, tasks.finishby, responsibles.full_name, task_assignments.completed, tasks.id, responsibles.user_id
FROM tasks, task_assignments, responsibles
WHERE tasks.id = task_assignments.id_task
AND responsibles.id = task_assignments.id_assignee
AND tasks.id =19
2)HTML/PHP代碼:
<table class="task_table">
<thead>
<th>Task</th>
<th>Description</th>
<th>Due date</th>
<th>Person</th>
<th>Completed</th>
</thead>
<?php
$even = false;
$trow = "";
while($row = mysql_fetch_array($task_details_q))
{
$trow = $trow . "<tr";
if($even) $trow = $trow . " style=\"background-color: #f2f2ed; \"";
$trow = $trow. ">";
$trow = $trow . "<td >$row[0]</td>";
$trow = $trow . "<td>" . $row[1] . "</td>";
$trow = $trow . "<td>" . date('d-m-Y',$row[2]) . "</td>";
$trow = $trow . "<td>$row[3]</td>";
$trow = $trow . "<td style=\"text-align: center;\" >";
if($row[4] > 0)
{
$trow = $trow . "<a href=\"javascript:modifyCompleted('remove','$row[6]',$row[5])\" title=\"Click to change completion of this task by this person\">yes</a>";
}
else
{
$trow = $trow . "<a href=\"javascript:modifyCompleted('add','$row[6]',$row[5])\" title=\"Click to change completion of this task by this person\">no</a>";
}
$trow = $trow . "</td>";
$trow = $trow . "</tr>";
$even =! $even;
$number = $number + 1;
}
$trow = $trow . "<tr style=\"border-top: 1px solid #666666;\"><td></td><td></td><td></td><td></td>";
$trow = $trow . "<td>";
$trow = $trow . "<a href=\"javascript:modifyCompleted('add_all','all',$task_details_array[5])\" title=\"Click to complete all\">Complete all</a>";
echo $trow;
?>
</table><br />
<span style="text-align: center;display:block;font-size: 12px;"><a href="tasks.php">Go back to task overview</a></span>
3)問題:出於某種原因,顯示的表總是省略一個記錄。我在PHP腳本的數量上使用了相同(或非常相似的概念),但從未遇到過同樣的問題。我認爲查詢本身不是問題 - 當我直接針對數據庫運行它時,它會返回正確數量的值......(我認爲)。
僅供參考,很可能您對SQL注入敏感。您應該始終使用查詢中使用的數據。更好的做法是學習使用PDO準備好的查詢,以完全避免這個問題。 – Brad 2012-04-16 21:11:29
我不確定這是否是問題的原因,但是您沒有完成最後一行。你看到源代碼中的正確結果嗎? – jeroen 2012-04-16 21:18:33
@ jeroen:好眼睛,你說得對 - 最後一排沒有'關閉'。不幸的是,這並沒有解決問題。:( – TomasH 2012-04-17 20:24:15