2015-04-12 161 views
-1

我做某事這樣不起作用:從MySQL在PHP中獲取數據

$q3 = $conn3->prepare("SELECT..."); 
    $q3->bindParam(':param1', $param1); 
    $q3->execute(); 

$check3 = $q3->fetchAll(PDO::FETCH_ASSOC); 

if (!empty($check3)){ 

$arr = array(); 
while($row = $q3->fetch(PDO::FETCH_ASSOC)) { 
     $arr[] = $row; 
    } 

}

,但我沒有看到數據ARR []以後。我在這裏做錯了什麼?有沒有更好的方式來獲取從MySQL的數據到PHP中的數組?

+1

'使用fetchall()'因爲你已經feteched數據? – Rizier123

+0

你能給我更詳細的答案嗎?我很抱歉,如果這是愚蠢的問題,我只是開始狡猾的PHP ... – randomuser2

+0

做'print_r($ check3);'在'fetchAll()'後你就會明白我的意思:) – Rizier123

回答

1

fetch()返回集合中的下一行。 fetchAll()將獲取所有(剩餘)行並將指針移至最後一行,因此在fetchAll()之後的fetch()不會返回任何內容,因爲該集中不會有下一行。

您需要一個或另一個。要充分利用使用fetchall的你可以這樣做:

$check3 = $q3->fetchAll(PDO::FETCH_ASSOC); 
foreach ($check3 as $row) { 

} 

或只使用不獲取使用fetchall:

while ($row = $q3->fetch(PDO::FETCH_ASSOC)) { 

} 

你的代碼,如IS,使得fetch()沒用。你可以只是做:

$arr = $q3->fetchAll(PDO::FETCH_ASSOC); 

即相當於:

$arr = array(); 
while($row = $q3->fetch(PDO::FETCH_ASSOC)) { 
     $arr[] = $row; 
    } 
} 
+0

謝謝,但如何我可以驗證查詢是否返回至少一行?以前我做過if(!empty($ check3)){但是現在我沒有看到它的位置.. – randomuser2

+1

在foreach之前有一個地方。使用'$ q3-> rowCount()'可以在MySQL上使用。 http://php.net/manual/en/pdostatement.rowcount.php – Devon