2013-05-03 5 views
0

У меня есть таблица, содержащая 3 строки. Я пытаюсь пройти через все строки, но я не получаю правильное количество строк.PDO Ошибка: fetchColumn() VS count()

Мой код выглядит следующим образом:

$result1_prepare = $DB->prepare("SELECT * FROM table"); 
$result1_prepare->execute(); 

$num = $result1_prepare->fetchColumn(); 
$result1 = $result1_prepare->fetchAll(); 


echo $num; //OUTPUT 3 
echo count($result1); //OUTPUT 2 

if($num > 0){ 

    foreach ($result1 as $x => $row) { 

     //LOOPING only 2 times, 1 row is not showing 

    } 


} 

Функция fetchAll() возвращает только 2 строки. Как так?

+5

вы используете 'fetchColumn' для подсчета количества строк? – christopher

+0

См. «PDOStatement :: rowCount» http://php.net/manual/en/pdostatement.rowcount.php –

+0

@dirt: '... инструкция SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. Однако это поведение не гарантируется ... ' –

ответ

5

Ваш код противоречит вашим словам. скорее всего, вы вызываете fetchColumn перед fetchAll - так, fetchColumn захватывает одну строку из набора результатов, оставляя только два для fetchAll.

В любом случае, вам не нужно ни один из этих

$stm = $DB->prepare("SELECT * table"); 
$stm->execute(); 
$data = $stm->fetchAll(); 

foreach ($data as $x => $row) { 

     //LOOPING only if there was data returned. no need to check the number 

} 
+0

Вы правы. FetchColumn выхватил одну строку из результирующего набора. Кроме того, теперь я использую rowcount для подсчета строк. –

Смежные вопросы