簡體   English   中英

php foreach() w/ MySQL WHERE w/ while{} 僅返回最后一個 array() 項

[英]php foreach() w/ MySQL WHERE w/ while{} returning only the last array() item

我的結果是吐出每條記錄的副本,而不是唯一的 foreach 匹配。 如您所見,我正在嘗試遍歷並獲取每個唯一值WHERE $s=id .. 我知道查詢需要在while()內,

數組 $seminar 從我的表單上的復選框傳遞。

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 />";

}

您不需要 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 (已經在上面的代碼中)

問題不在於 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來迭代返回記錄的每個字段 由於您的查詢返回每個包含三個字段( idnamemoment )的記錄,因此您將處理每條記錄三次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM