Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 25/09/2017, à 02:38

gaffeur

[Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Bonjour,

Ma requête sql retourne bien le résultat attendu, ... cependant il me manque toujours la première ligne de données. J'ai identifié l'origine du problème, mais je ne parviens toujours pas à le résoudre.

Le problème existe parce que j'ai placé une condition pour vérifier si la requête est "NULL" ou pas :

 
$sql = 'SELECT * FROM slide WHERE statut = 1';
//
$result_slide = $db->query($sql);
// Vérification de la présence de données
if(!$result_slide->fetch() === false){
// traitement ... ...
   foreach($result_slide as $row) {
      $slide[] = $row ;
}else{$slide = array();}

(la variable $slide est ensuite récupérer dans une fonction ... ...)

Sans la condition :

if(!$result_slide->fetch() === false)

le résultat obtenu est correct.
Il semblerait que le pointeur soit déplacé suite à cette condition ... ...
Mais tentatives avec la fonction "sqlite_rewind" ne semblent pas fonctionner.

Dernière modification par gaffeur (Le 25/09/2017, à 13:46)


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne

#2 Le 25/09/2017, à 06:36

Rufus T. Firefly

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Il n'y a pas une fonction genre num_rows dans sqlite qui donnerait le nombre de lignes renvoyées ?


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#3 Le 25/09/2017, à 10:02

mandeb

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Bonjour,
Pour moi c'est logique : le fetch fait avancer le curseur d'un cran car il faut bien le faire pour voir le contenu éventuel du curseur.

La fonction EXISTS devrait t'aider à résoudre ton souci (avec un petit coup de moteur de recherche)

bonne journée

Hors ligne

#4 Le 25/09/2017, à 10:46

bruno

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

$sql = 'SELECT * FROM slide WHERE statut = 1';

$result_slide = $db->query($sql);

while (($row = $result_slide->fetch()) !== false) {
    $slide[] = $row;
}

Hors ligne

#5 Le 25/09/2017, à 13:41

gaffeur

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

... merci pour vos réponses ! wink

@ Rufus T. Firefly
Oui, il y a bien une fonction sqlite_num_rows() mais c'est valable en procédurale ...

(je l'avais pas précisé, mais j'utilise PDO pour accéder à la BD ...)

 try {
	$db = new PDO('sqlite:../dossier/base.sqlite');
}
catch(PDOException $e){
	echo "la base de donnée n\'est pas accessible !";
}

@ mandeb
La fonction EXISTS ne solutionne pas le problème dans le cas présent. Elle est surtout utile pour vérifier si des données sont présentes dans une table avant de faire une requête sur une autre table ... (j'ai vérifié dans un de mes livres sur "SQL - Et algèbre relationnelle").


Le problème étant de définir la variable $slide, afin de ne pas avoir un message d'erreur dans le cas d'une requête NULL ; j'ai opté pour cette méthode qui répond au problème, tout en conservant "la condition"  :

$sql = ("SELECT * FROM slide WHERE activation = 1");
$stmt = $db->prepare($sql);
$stmt->execute();

if ($result = $stmt->fetch()) {
        do {
               $slide[] = $result ;
             } while ($result = $stmt->fetch());
       } else {
                  $slide = array() ;
                }

Ça fonctionne parfaitement ; plus de message d'erreur ! smile

Dernière modification par gaffeur (Le 25/09/2017, à 14:10)


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne

#6 Le 25/09/2017, à 15:53

mazarini

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Je verrai bien :

$sql = ('SELECT * FROM slide WHERE activation = 1');
$stmt = $db->prepare($sql);
$stmt->execute();
$slide = $stmt->fetchAll();

S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#7 Le 25/09/2017, à 17:12

gaffeur

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Ah ouiiiiiii  ... bien vu !
Ça permet de simplifier un max,  en une seule ligne et avec la condition :

if(!$slide = $stmt->fetchall()){ $slide = array() ; }

Cool ... cool


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne

#8 Le 26/09/2017, à 10:21

mazarini

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Normalement fetchAll retourne toujours un tableau. Donc, si pas de résultat, un tableau vide. Ca doit permettre de supprimer le test.


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#9 Le 26/09/2017, à 12:21

gaffeur

Re : [Résolu] PHP - Requête SQL : il manque une ligne de données ? ... ...

Oui, dans l'absolu tu as raison.

(... vu de l'extérieur, je comprends que cela puisse sembler inutile. Mais à ce stade du développement, j'ai besoin de cette condition pour injecter des éléments dans "array()" afin d'organiser différents tests ...  si et seulement si ma requête est null .... )


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne