2016-03-08 2 views
0

Я сделал цикл while, чтобы отображать данные из моих табличных карточек. Проблема заключается в том, что он не отображает первую строку таблицыPhp - Пока данные цикла MySQL

$reponse = $bdd->query('SELECT * FROM cartes'); 
$donnees = $reponse->fetch(); 

while ($donnees = $reponse->fetch()) { 
?> 

    <p> 
    <strong>Carte: </strong> <br /><br /> 
    <u>ID:</u> <?php echo $donnees['ID']; ?><br /> 
    <u>Propriétaire:</u> <?php echo $donnees['nom']; ?><br /> 
    </p> 

    <?php 
} 

$reponse->closeCursor(); 
?> 

Мой стол:

CREATE TABLE IF NOT EXISTS `cartes` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`nom` varchar(255) NOT NULL, 
PRIMARY KEY (ID) 
) ENGINE=INNODB DEFAULT CHARSET=latin1 AUTO_INCREMENT=51; 

Благодаря

+3

удалите эту строку $ donnees = $ reponse-> fetch(); –

ответ

1
$reponse = $bdd->query('SELECT * FROM cartes'); 
$donnees = $reponse->fetch(); 

это $reponse->fetch() загрузит первый ряд от ответа. поэтому, когда $reponse->fetch() в цикле while, он начнется со второго ряда. поэтому вам нужно удалить $donnees = $reponse->fetch(); снаружи во время цикла.

2

«Оскорбительная» строка кода - $donnees = $reponse->fetch(); как @Goudea Elalfy, указанная в комментариях.

Причина этого заключается в том, потому что после того, как вы получаете данные, как показано ниже

$reponse = $bdd->query('SELECT * FROM cartes'); //Fetches the data 

Вы затем извлечь одну строку из возвращенного результата.

$donnees = $reponse->fetch(); //Fetches the first row from the result set 

И тогда вы запрашиваете данные еще раз в то время цикла:

while ($donnees = $reponse->fetch()) { // starts from the second row in the result set. 

Но потому, что вы все готовы попросили результирующий набор возвращает одну строку из результирующего набора один раз, ответ возвращает ВТОРОЙ набор результатов/данных в цикле while, и каждый раз, когда вы зацикливаете ответ, вы получите следующий набор данных.

Вы можете посмотреть на него как на массив, при первом вызове набора результатов вы получите $response[0] во второй раз, когда вы вызываете результирующий набор, вы получаете $response[1] и так далее.

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