2016-01-10 49 views
3

我想從其他數組中分離第一個PDO結果數組。這裏是我的嘗試:如何將查詢的第一個結果與其他結果分開?

$iterator = 1; 
while($results = $stmt->fetch(PDO::FETCH_ASSOC) and $iterator == 1){ 
    /* I need just first row here */ 
    print_r($results); 
    $iterator++; 
} 

while($results = $stmt->fetch(PDO::FETCH_ASSOC)){ 
    /* I need other rows here */ 
    print_r($results); 
} 

第一while()執行我的代碼(上面的代碼永遠只是打印查詢的第一個結果)。那麼,我該如何解決它?

注意:我不想使用fetchAll();

回答

5

試着這麼做:

$results = $stm1->fetch(); 
print_r($results); 

while($results = $stm1->fetch()){ 
    print_r($results); 
} 

你實際上並不需要一個循環來獲得的第一個元素,然後就可以恢復迭代與曾經被認爲是你的第二個循環。

while($results = $stm1->fetch() and $iterator == 1){ 

的問題是,如果在結果集中一個或多個結果,你會總是呼叫$stm1->fetch()兩次:一次是你第一次進入循環,然後再次進行第二次迭代,然後再實際檢查($iterator == 1)不再成立。

如果只有兩個結果在結果集中,那麼將在從未被進入第二循環表現(因爲取不會有任何結果左)。

+0

在第一種情況下不需要while()控制結構 - 簡單的$ firstRow = $ stm1-> fetch()就足夠了。在第一次迭代之後製造一個循環並破壞是浪費 –

+0

@DenisMysenko yes;我相應地調整了。簡單回答這個問題的小腦袋。 – jbafford

3

你並不需要一個while循環,因爲你只需要取1行,你並不需要一個while循環,只是做:

$firstRow = $stmt->fetch(PDO::FETCH_ASSOC); 

之後,你可以把你的while循環就像你已經做的那樣。

+0

那麼以後如何獲取其餘行? – stack

+0

@stack正如你已經用你的第二個循環 – Rizier123

+0

做了一個'問題' - 第二個循環會錯過第一行(因爲它已經被取出)。只是不要忘記包括$ firstRow你需要在代碼 –

1
$result = $stmt->fetch(PDO::FETCH_ASSOC); 

將只給出您的查詢執行的第一行。即使你使用它只會導致第一行。

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

將給出您的查詢執行的所有記錄。

相關問題