php foreach()w / MySQL WHERE w / while {}仅返回最后一个array()项

时间:2011-07-06 23:12:35

标签: php arrays foreach while-loop

我的结果是吐出每条记录的副本而不是唯一的foreach匹配。正如您所看到的,我正在尝试循环并获取每个唯一值 WHERE $ s = id ..我知道查询需要位于 while(),< / p>

数组$研讨会从我表单上的复选框传递。

if ($seminar) {
    foreach ($seminar as $s)
        $interest .= "$s ";
}

注意: $ interest 是我用来插入表格的(这不是这个问题的一部分)

对于数组数据,这是 $ seminar

返回的内容
Array
(
    [0] => 1
    [1] => 8
    [2] => 9
    [3] => 10
    [4] => 13
)

这是我的代码:

$query_seminars = mysql_query("SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE id={$s}");
    while ($sem_row = mysql_fetch_assoc($query_seminars))
    {
        $names .= "-- " . $sem_row['id'] . " " . $sem_row['name'] . date('D, F j, Y, g:i a',     $sem_row['moment']) . "<br />";

}

2 个答案:

答案 0 :(得分:5)

你不需要while循环中的foreach,这里:

$query_seminars = mysql_query("SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE id={$s}");
while ($sem_row = mysql_fetch_assoc($query_seminars))
{
    $names .= "-- " . $sem_row['id'] . " " . $sem_row['name'] . date('D, F j, Y,     g:i a', $sem_row['moment']) . "<br />";
}

另外,要使用命名索引,请使用mysql_fetch_assoc,而不是mysql_fetch_array。 (已在上面的代码中)

答案 1 :(得分:1)

问题不在于MySql返回重复(实际上是三重)项目。问题在于,正如其他人指出的那样,您正在使用foreach迭代每条记录。

与MySql一起使用的一个常用习惯是:

$sql = "SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE $s=id";

if ($q = mysql_query($sql)) {
  while ($f = mysql_fetch_assoc($q)) {
    //($f is an associative array of the record value, 
    //with keys for each field)
    //... do something with $f
    echo "--" . htmlspecialchars($f['name']) 
      . date('D, F j, Y, g:i a', $f['moment']) 
      . "<br /><br />";
  }
} elseif ($e = mysql_error()) {
//do something with the error message
//...
}

您看到“重复”,因为您在while循环中使用foreach来迭代返回记录的每个字段。由于您的查询返回的记录包含三个字段( id name moment ),因此您将处理每个记录三次。