2015-12-10 26 views
0

有沒有辦法讓代碼更清潔? 我想訪問$query4week這樣的行:$query4week[0]。 但mysqli_query()返回一個對象,我不知道如何訪問它的特定行。因此,使用fetch_arrayfor循環,我決定創建我自己的索引。瞭解mysqli_fetch_array()

$sql2 = "SELECT * FROM meals ORDER BY RAND() LIMIT 7"; 
$query4week = mysqli_query($con, $sql2) or die(mysqli_error($con)); 
for ($i = 0; $result = mysqli_fetch_array($query4week, MYSQLI_ASSOC); $i++) 
{ 
    $meal4week[$i] = $result['meal']; 
} 

我仍然在學習PHP,但相當有OOP主題薄弱,請耐心等待:-)

回答

0

mysqli_query返回表示查詢結果的資源。您需要使用mysql_fetch_*函數逐行遍歷結果。所以是的,如果你對第一行感興趣的話,你需要一些循環。

1

做,在這種方式

$i = 0; 
while ($result = mysqli_fetch_array($query4week, MYSQLI_ASSOC)) 
{ 
    $meal4week[$i] = $result['meal']; 
    $i++; 
} 

應該工作。

2

如果您獲取關聯數組,則不應該需要for循環。

$i = 0; 
while($row = mysqli_fetch_array($query4week, MYSQLI_ASSOC)) 
{ 
    $meal4week[$i] = $row['meal']; 
    $i++; 
} 
+0

如果錯過了;第一次在$ i ++之後,嚴重地複製和粘貼;) –

+0

@justacoder fixed @@(ツ)_ /¯我已經回去修復我的打字時的引號,這裏沒有複製意大利麪。 –

+0

mysqli_fetch_array在for循環中,可能缺少;可以.....;) –

1

這裏已經有一些完全合理的答案,但是對於評論來說這有點長。如果您正在創建的是以索引0開頭的數字索引數組,則不需要顯式定義索引。

while($row = mysqli_fetch_array($query4week, MYSQLI_ASSOC)) { 
    $meal4week[] = $row['meal']; 
} 

應該工作得很好。不需要$i

+0

是的!但有時只是爲了感覺或其他... –

+0

非常感謝您的回答 - 這是一個很好的選擇,並且一定會使代碼更清晰。但是我認爲@ZeissS答案對我最有幫助,因爲我不確定我是否做了一些過於複雜的事情,或者是否有另一個一次完成所有事情的獲取函數。 – Lex

+0

這很有道理,這個答案是一個更好的解釋。實際上有另一個fetch函數可以一次執行它(['fetch_all'](http://php.net/manual/en/mysqli-result.fetch-all.php)),但正如鏈接文檔中所述,它僅適用於MySQL Native Driver Only。 –