2015-04-12 83 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