2012-12-08 89 views
1

我有以下代碼。我標記爲block 1block 2似乎不能一起工作,但如果我擺脫了其他人會做的一件事;當檢查使用print_r.我是相當新的PHP,並想知道如果有人可以指出我錯了什麼地方。我曾在其他地方工作,但失去了檔案。提前謝謝了。要檢查的PHP代碼

P.S:我知道最好早點進入PDO和mysqli,而不是晚點進入。但我只想先掌握基本知識。

<?php 


//Connect to database 

$connect = mysql_connect ("localhost","root","password"); 
$db = mysql_select_db("project"); 


//Find top 100 most popular images 

$pop = mysql_query(" 


SELECT * FROM users ORDER BY pop DESC LIMIT 2 

"); 

//Define local variables for images to show 

//block 1// 

$images = array(); 
while ($row = mysql_fetch_array($pop)) { 
    $images[] = $row['image']; 
    } 

//block2// 

$links = array(); 
while ($row = mysql_fetch_array($pop)){ 
$links[] = $row['username']; 
} 

?> 
+2

您沒有進行任何錯誤檢查,因此當出現問題時您無法獲得任何有意義的錯誤消息。有關如何正確執行此操作的示例,請參閱mysql_query上的手冊:http://php.net/mysql_query –

回答

4

mysql_data_seek將工作:

$images = array(); 
while ($row = mysql_fetch_array($pop)) { 
    $images[] = $row['image']; 
} 

mysql_data_seek($pop, 0); 

$links = array(); 
while ($row = mysql_fetch_array($pop)){ 
    $links[] = $row['username']; 
} 

然而,更好/更清潔的解決您的問題將在第一個循環期間將兩個值放入它們各自的陣列中:

$links = array(); 
$images = array(); 
while ($row = mysql_fetch_assoc($pop)) { 
    $images[] = $row['image']; 
    $links[] = $row['username']; 
} 

或者,更清潔 - 增加一個數組你的數組:

$avatars = array(); 
while ($row = mysql_fetch_assoc($pop)) { 
    array_push(
     $avatars, 
     array('image' => $row['image'], 'username' => $row['username']) 
    ); 
} 

var_dump($avatars); 
+2

+1更清潔的解決方案建議! – jan267

+0

非常感謝。您的提案奏效了。 – Roy

1

首先,Please, don't use mysql_* functions in new code。他們不再被維護,並且已經開始了它。請參閱 red box?請改爲了解prepared statements,並使用 PDOMySQLi - this article將幫助您決定哪個。如果您選擇 PDO,here is a good tutorial

mysql_data_seek($pop, 0)兩者之間while循環一次或與此替換代碼:

$images = array(); 
$links = array(); 
while ($row = mysql_fetch_array($pop)) { 
    $images[] = $row['image']; 
    $links[] = $row['username']; 
} 
+0

謝謝。生病給它之前。你的意思是將mysql_fetch_array替換爲「mysql_data_seek」>? – Roy

+0

不,只是用你的代碼替換! – jan267

0

你已經遍歷的第一塊組的全部結果,你需要重新尋找指針這兩個代碼塊之間的結果集的開始部分是:

mysql_data_seek($pop, 0); 
+0

我輸得太慢了,克蘇魯,韋恩和Jan367也打敗了我吧。 – shannonman

+3

Wayne Whitty的解決方案比其他人的解決方案更好,因爲它解決了問題,而不是解決各種問題:) –

+0

絕對同意。 – shannonman

-2

語法錯誤。

while ($row = mysql_fetch_array($pop, MYSQL_ASSOC)) 
+0

當未指定result_type時,默認情況下會採用'MYSQL_BOTH',它既是數字索引也是關聯。請參閱[**'mysql_fetch_array' **](http://php.net/manual/en/function.mysql-fetch-array.php) –

+0

給我一個更快的代碼的吸盤,它比懶惰的編程使用更少的內存。 – Chevy372

+0

授予。仍然,調用錯誤的語法是不正確的。 –