requête LIMIT nombre -> ok mais Variable non

Rechercher

requête LIMIT nombre -> ok mais Variable non

Par papy71  -  5 reponses  -  Le 24/05/2018 18:48  -  Editer  - 

Bonsoir,

Pourquoi ma requête suivante retourne bien mes valeurs, et la suivante (avec des variable) retourne une erreur.

    //requête pour faire le test...  

    $resultat = mysqli_query($bdd, 'SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT 1,30');  
        while($donnees = mysqli_fetch_assoc($resultat))  
    {  
        echo 'ok !';  
    }  

    exit;  

résultat une ligne de 'ok' -> c'est les boucles....

    //requête pour faire un test avec variables ...  

    $njour = 1;  
    $dif = 30;  


    $resultat = mysqli_query($bdd, 'SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT $njour, $dif');  
        while($donnees = mysqli_fetch_assoc($resultat))  
    {  
        echo 'ok !';  
    }  
    exit;  


    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /home/pv-solaire/www/tableaux.php on line 46  

retour avec or die(mysql1_error()

    Fatal error: Uncaught Error: Call to undefined function mysql1_error() in /home/pv-solaire/www/tableaux.php:45 Stack trace: #0 {main} thrown in /home/pv-solaire/www/tableaux.php on line 45  

Je ne comprends pas ce problème, j'ai essayé avec des ' et " même résultat.
Sûr que je fais une erreur mais je nage, une explication me sera grandement utile.

Merci d'avance.
Cdt.

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 25/05/2018 08:24  -  Haut de page  - 

Attention à la syntaxe et à la manière d'introduire des variables PHP dans une chaîne de caractères comme ici dans une requête SQL :

$resultat = mysqli_query($bdd, 'SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT $njour, $dif');

On va commencer par séparer la requête SQL du PHP en la mettant dans une variable avant de l'exécuter. Ça permettra de vérifier ce qui est effectivement envoyé vers MySQL :

// Définition de la requête SQL
$sql = 'SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT $njour, $dif';
echo('<pre>Requête SQL :';
echo($sql);
echo('</pre>';
// Exécution de la requête
$resultat = mysqli_query($bdd, $sql);

À vérifier, mais il est probable que ça va afficher quelque chose comme ceci :

Requête SQL :
SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT $njour, $dif

Alors qu'on s'attend à ce que ça affiche quelque chose qui ressemblerait davantage à :

Requête SQL :
SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT 0, 10

En clair, les variables PHP dans la requête ne sont pas interprétées. Ça vient de ce qu'en PHP, une variable entre apostrophes (« ' ») n'est pas interprétée contrairement à la même variable entre guillemets (« " »)

Corrigeons donc la définition de la requête en faisant une concaténation propre :

$sql = 'SELECT Id, Date, Ener, Prix, PV FROM annuelle LIMIT '. $njour .', '. $dif;

Je vous laisse tester ça.

 
Par papy71  -  Le 26/05/2018 10:16  -  Haut de page  - 

Bonjour Cyrano,

Merci, votre réponse fonctionne très bien, parfait, sauf que maintenant j'ai un problème de date....je vais chercher....

Etant un ancien programmeur en Basic puis Turbo Pascal et Delphi, il me manque la déclaration de variable, genre a:int; entre Begin et End. J'ai du mal avec ces ' ou " ou un point devant la variable ou encore la variable entourée par des points. j'avais fait l'essai un point devant ma variable njour.

Merci pour l'aide, je ne suis pas rapide pour vous répondre, il me faut beaucoup de temps car je suis malvoyant, je ne vois qu'un disque de 2 cm de diamètre sur mon écran. Sous peu je ne verrai plus rien....

Merci, depuis 3 mois, j'ai repris la programmation. Vous pensez bien que j'ai cherché sur le web, et il y a de tout....il faudrait un bon coup de balaie( posts avec liens qui sont obsolètes, posts trop anciens...).
Après avoir suivi un cours PHP, j'ai regardé sur les forums...
Mr Cyrano, vos posts ont fait que j'ai choisi ce site pour avoir de l'aide.
Vos interventions sont pedagogiques et très constructives.Jamais d'agressivité, je vous remercie pour ce bénévolat.
Sachez qu'à 70 ans, j'hésite de demander de l'aide, avant j'étais dans le coup.

 
Par Cyrano  -  Le 26/05/2018 11:23  -  Haut de page  - 

Bonjour Papy71,
ma façon de faire ici est à mon sens la seule rationnelle, je la base sur un vieux principe : si je donne un poisson à un homme, il se nourrira une journée, si je lui enseigne la pêche, il se nourrira tout seul toute sa vie, ça me simplifie notablement la vie.

Il est vrai que le PHP est un langage qui est assez éloigné de langages comme le Basic, et je ne connais ni le Turbo Pascal ni le Delphi.
Ceci étant, le PHP a ses propres règles, un peu comme une langue : le français, l'espagnol, l'allemand, le portugais, le japonais et en bref toutes les langues ont leur propres vocabulaire, leur grammaire, leur syntaxe. Il convient d'utiliser ce qui correspond à la langue choisie sans trop chercher à mélanger avec celles d'une autre langue pour être compris de ses locuteurs.

L'opérateur de concaténation en PHP est le point. Quant à la différence entre apostrophe et guillemets, je dois avouer que je n'ai jamais vraiment saisi l'intérêt de conserver les deux, c,est très perturbant pour tous les débutants et ça donne lieu à des erreurs parce qu'il y a des comportements différents selon qu'on utilise l'un ou l'autre. Mais il convient au moins de savoir qu'entre apostrophes, une variable n'est pas interprétée.

Voilà, si vous avez d'autres soucis, n'hésitez pas à revenir. Il n'y a pas trop de monde ici et c'est le seul forum que je peux suivre activement. J'ai été très actif sur PHPFrance, mais là il y a trop de monde et je n,ai plus du tout le temps. Mais on y trouve toujours quelques tutos que j'y ai posté il y a quelques années et qui restent valides dans les principes.

 
Par papy71  -  Le 26/05/2018 15:16  -  Haut de page  - 

Merci pour le dévouement...

Mais mon post précédent sur la non apparition de mon graphique est tjs d'actualité. Le changement de php et de Vista en Win 10 empêche l'apparition de ce graphique.
Je peux inscrire des options pour PHP.ini chez l'hébergeur.

On repasse sur mon post précedent pour fermer celui-ci, SVP ?
Merci.

 
Par Cyrano  -  Le 26/05/2018 15:30  -  Haut de page  - 

J'ai formulé une piste pour débusquer l'erreur sur l'autre post.

Considérons celui-ci clos et continuons sur l'autre.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |