2012-08-16 124 views
-1

我有三個php數組,我填滿了從msql查詢返回的信息。前兩個數組完全滿足信息需求,但最後一個數組沒有填滿。唯一進入的是'v'。它完美的工作,如果我不把它作爲一個數組,只是一個單一的值,但是當我把它作爲一個數組停止工作。如果你有任何想法,謝謝。while循環php數組

$query = mysql_query("SELECT * FROM chanels WHERE cname = '$cname' "); 
$numrows = mysql_num_rows($query); 

while($row = mysql_fetch_array($query)) 
{ 
    $videolocation[$counter2] = $row['videolocation']; 
    $title[$counter2] = $row['title']; 
    $imagelocation[$counter2] = $row['videoimagelocation']; 
    $counter2++; 

} 

ImageLocation數組是一個不工作,而另外兩個填滿完美。我檢查過拼寫,所有內容都完美輸入。

+1

'$ counter2'是什麼?你也可以使用單個數組來存儲所有三個值。爲什麼使用3個數組? – asprin 2012-08-16 05:49:22

+0

使用'var_dump'向我們展示最後一種情況下'$ row'的內容。其次,請不要使用'mysql_ *'函數,它是[*棄用(見紅色框)*](http://php.net/manual/en/function.mysql-query.php),並且容易受到sql-注射。使用PDO或MySQLi。 – alfasin 2012-08-16 05:52:13

+0

check print_r($ row);包含這個關鍵的videoimagelocation? – gaurang171 2012-08-16 05:52:55

回答

3

而是讓你帶回行與命名爲結果的列數組中鍵使用fetch_array使用mysql_fetch_assoc你的方法 - 就像這樣:

while ($row = mysql_fetch_assoc($result)) { 
    echo $row["videolocation"]; 
    echo $row["title"]; 
    echo $row["videoimagelocation"]; 
} 

此外,你應該搬走從舊的mysql_*功能和修補與新的閃亮的PDO功能。這些將使您以更安全的方式連接,並提供更多的靈活性。

編輯:當你帶回assoc數組時,它仍然是數據庫的一行。不過,您目前的代碼返回是這樣的:

$row[0]='someLoc' // Data from videoLocation 
$row[1]='someTitle' // Data from title column 
$row[2]='someImageLoc' // Data from videoImageLocation 

而且副教授陣列會像這樣:

$row['videolocation']='someLoc' 
$row['title']='someTitle' 
$row['videoimagelocation]='someImageLoc' 

編輯2:看來我追了有點紅鯡魚與陣列vs assoc問題。我可以檢查的第一件事是拼寫,但你已經這樣做了,接下來是檢查案例的列名。在Windows上,這種情況默認情況下並不重要,但在Linux機器上,它是

我覺得最簡單的方法是做到這一點:

mysql_query("SELECT videolocation, title, videoimagelocation FROM chanels WHERE cname = '$cname' "); 

如果列是錯誤的情況下,本應返回一個錯誤給你。

+0

我想將這些值添加到數組中,並且我提取數組的原因是因爲查詢可能返回多個行 – 2012-08-16 06:01:23

+0

@Fluffeh當您使用mysql_fetch_array()與沒有第二個參數,它默認爲'MYSQL_BOTH',所以返回的數組包含__both__數字索引和字符串索引。 – Barmar 2012-08-16 06:26:46

+0

@KeithDrakeWaggoner爲你做了另一個編輯。 – Fluffeh 2012-08-16 08:00:31

0

不是一個答案,而是一個更好地使用數組的建議。使用單一一個來存儲所有數據:

while($row = mysql_fetch_array($query)) 
{ 
    $details[$counter2] = array('videoLocation' => $row['videolocation'], 
           'title' => $row['title'], 
           'imageLocation' => $row['videoimagelocation'] 
           ); 
    $counter++; 
} 

這樣的話,第一個索引將存儲第一排的細節,第二個索引將存儲第二行的詳細信息等。