2012-03-18 72 views
3

好了,所以我知道,做的時候:使用,而不是一個foreach循環,而用myslqli_fetch_array()

//connection code; 

//query code; 

//$result= mysqli_query(); 

$row= mysqli_fetch_array($result); 

您創建一個關聯數組,其中從表中的列名是在數據的關鍵各自的行。

然後你可以使用:

while ($row= mysqli_fetch_array($result)) 
{ 
//code to echo out table data. 
} 

我的問題是如何while循環去到下一行每次迭代之後?我認爲這是foreach循環的目的?

+1

請注意['PDOStatement'](http://php.net/PDOStatement)支持['Traversable'](http://php.net/Traversable)接口,所以它可以在'foreach'直接循環,不像mysqli結果。 – outis 2012-03-18 09:51:13

+2

from PHP5.4'mysqli_query'返回['mysql_result'對象](http://www.php.net/manual/en/class.mysqli-result.php)它是[Traversable](http:// www .php.net/manual/en/class.traversable.php),所以使用'foreach'也可以。 – 2012-03-18 09:55:28

回答

0

這部分在時間

$row = mysqli_fetch_array($result); 

獲取一行把它變成一個while循環,使得它在同一時間讀取一行,直到它,因爲沒有更多的是取不取一排。

另一種方法是將所有的行,通過他們然後循環使用的foreach

$rows = mysql_fetch_all($result); 
foreach($rows as $row){ 
    // do something with row 
} 

對於這個工作回來,你必須讓自己mysql_fetch_all功能,這當然具有原始while循環在它...

function mysql_fetch_all($result) 
{ 
    $all = array(); 
    while($thing = mysql_fetch_assoc($result)) { 
    $all[] = $thing; 
    } 
    return $all; 
} 
0

由於SQL連接器在結果中存儲了查詢的當前狀態(即返回的下一個結果行),因此這樣工作。

如果你想有一個類似的例子,它的工作原理是從文件中讀取,在那裏你可以使用類似的結構:

while ($line = fgets($fp, 1000)) { 
    // ... 
} 

在幕後(和依賴於語言,解釋器,編譯器,等等)forwhile本質上導致相同的代碼。區別在於,根據您的代碼應該執行的操作,一種方法比另一種方法更具可讀性。

以下面的兩個循環爲例。兩者完全一樣。

返回結果集
for ($i = 0; $i < 10; $i++) { 
    // ... 
} 

$i = 0; 
while ($i < 10) { 
    // ... 
    $i++; 
} 
+1

這不是PHP,而是MySQL客戶端庫。 – glglgl 2012-03-18 10:02:21

+0

它通過了?好吧,以爲MySQL(或任何庫被使用)認爲是。但是,它會再次使用通用調用。採取的點。 – Mario 2012-03-18 10:04:03

1

許多功能通過返回一個數組,你可以像你用來做foreach()這樣做。但情況並非總是如此,特別是對於數據庫功能。 mysqli_fetch_array只提取一行,或者返回布爾值false,如果沒有更多剩餘的。這就是循環的工作原理:只要有一行要處理,表達式的計算結果就是true

這種結構的原因主要是效率。獲取數據庫行可以是性能關鍵操作,並且在某些情況下不需要所有行。在這些情況下,這種方法會給予更多的靈活性由於並不是所有的結果數據都必須一次加載到內存中,因此一個接一個地獲取行也更易於記憶。

Mysqli實際上有一個函數可以獲取數組中的整個結果集:mysqli_fetch_all。你將可以通過foreach()

0

每次while循環運行時,它都會執行函數mysql_fetch_array並獲取下一個結果。它是這樣做的,直到沒有更多的結果顯示。

0

mysql_fetch_array返回一個對應於所提取行的字符串數組,或者如果沒有更多行,則返回FALSE。如果行存在,則獲取數據。

我希望這已經回答你q。它很難理解你的意思

1

mysql_fetch_array只是從你的mysql查詢中獲取結果集的下一行,並將該行作爲數組返回,或者如果沒有更多行要獲取,則返回false。

while循環不斷從結果集中一次一個地提取結果,並一直持續到mysql_fetch_array爲止。

foreach循環遍歷數組的每個值。由於mysql_fetch_array只能提取一個結果,因此count($ row)的值每次都是1。

相關問題