IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[mysqli] No data supplied for parameters in prepared statement [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut [mysqli] No data supplied for parameters in prepared statement
    Bonjour,

    Après avoir écumé une bonne partie du web pour trouver une réponse à ma question, et sans succès, je poste ici mon problème, puisque je trouve souvent mes réponses sur ce site.

    Je développe actuellement une appli en php pour remplir une base de données à partir d'un fichier xml.

    Une fois ma structure objet construite et remplie avec les bonnes valeurs, et une fois connecté à ma base, je dois remplir les tables (elles sont déjà créées).

    Alors que toutes les étapes précédentes sont testées et vérifiées, je rencontre ici le problème suivant : l'exécution de mon code me renvoie toujours "no data supplied for parameters in prepared statement" dans le champ erreur d'exécution, alors que les deux champs d'erreur précédents ne renvoient rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $requeteCentrale = "INSERT INTO Centrale VALUES (?, ?, ?, ?)";
    		$centraleInsert = $this->mysqli->prepare($requeteCentrale);
     
    		echo("prepare error :" .$centraleInsert->error . "</br>");
     
    		$centraleInsert->bind_param("s,s,d,d", $nomCentrale, $lieuCentrale, $latitudeCentrale, $longitudeCentrale);
     
    		echo("bind error :" .$centraleInsert->error . "</br>");
     
    		$nomCentrale = "pvUn";
    		$lieuCentrale = "parLa";
    		$latitudeCentrale = 42;
    		$longitudeCentrale = -42;
     
    		$centraleInsert->execute();
     
    		echo("execute error :" .$centraleInsert->error . "</br>");
     
    		$centraleInsert->close();
    J'ai lu dans le manuel que les paramètres devaient être passés à mysqli->bind_param() par référence depuis php 5.3.x, mais j'ai testé les deux et aucune méthode ne fonctionne...

    Si quelqu'un a une idée du pourquoi du comment, ça m'enlèverait une belle épine du pied, ce problème commence à m'agacer sérieusement...

    Merci d'avance

    Amaltae

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Dans code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		$centraleInsert->bind_param("s,s,d,d", $nomCentrale, $lieuCentrale, $latitudeCentrale, $longitudeCentrale);
     
    		echo("bind error :" .$centraleInsert->error . "</br>");
     
    		$nomCentrale = "pvUn";
    		$lieuCentrale = "parLa";
    		$latitudeCentrale = 42;
    		$longitudeCentrale = -42;
     
    		$centraleInsert->execute();
    Les variables sont initialisées après le bind, ça va pas le faire ...
    Il faut initialiser les variables avant le bind
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Voui...
    J'aurai peut être du poster mon code avant bidouillage, parce que du coup elles n'y figurent plus

    A l'origine j'avais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nomCentrale = "" ;
    		$lieuCentrale = "";
    		$latitudeCentrale = 0.0;
    		$longitudeCentrale = 0.0;
    Bout de code suivi de ce que j'ai posté plus haut.
    Et ça ne fonctionnait pas plus...

    Soit je suis très fatigué, soit j'ai loupé un truc quelque part.

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ;
    normalement sa devait être comme exemple cidessus non!!!:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $value);
     
    ?>
    http://php.net/manual/fr/pdo.prepared-statements.php

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Au détail près que j'utilise mysqli et pas PDO, si ça fonctionne pareil, oui...

    EDIT : sauf que visiblement ça ne fonctionne pas pareil
    http://php.net/manual/en/mysqli-stmt.bind-param.php

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Et la table Centrale, elle est composée comment, ya pas des not null ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re;
    aucune méthode ne fonctionne...
    est ce que ta des messages d'erreurs ? sauf
    no data supplied for parameters in prepared statement
    y'a pas passage de données dans les paramétres
    est ce que la connexion a ta BDD se fait bien ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Si, de fait, j'ai un "not null" sur nom et sur lieu, latitude et longitude pouvant être à NULL

    Mais étant donné que je remplis tous les champs de la table, je ne sais pas si ça peut avoir le moindre impact...

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    @Redoran :

    Quand je disais "Aucune méthode ne fonctionne", je faisais référence à tous les bidouillages que j'ai testé (déclaration des variables avant, avec ou sans références, etc...)

    L'intégralité du code s'exécute (testé via une multitude d'echo) et la seule erreur que je récupère est celle qui figure dans le titre...

    La connexion à la base de donnée est effective aussi, j'arrive à insérer des données via une requete toute bete sans passer par mysqli->prepare et mysqli->bind_param.

  10. #10
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    essaye de reprendre la même syntaxe du lien que ta posté sans rien changé.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Avec ce bout de code là, ça a très bien fonctionné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $code = "";
    		$langage = "";
    		$official = 0.0;
    		$percent = 0.0;
     
    		echo($this->mysali->host_info . "</br>");
    		$stmt = $this->mysqli->prepare("INSERT INTO Centrale VALUES (?, ?, ?, ?)");
    		echo("prepare error :" .$stmt->error . "</br>");
    		$stmt->bind_param('ssdd', $code, $language, $official, $percent);
    		echo("prepare error :" .$stmt->error . "</br>");
     
    		$code = 'DEU';
    		$language = 'Bavarian';
    		$official = 10.1;
    		$percent = 11.2;
     
    		$stmt->execute();
     
    		echo("execute error :" .$stmt->error . "</br>");
     
    		$stmt>close();
    J'ai donc bien une erreur quelque part

    Bon, et bien merci beaucoup de m'avoir aidé à mettre le doigt sur le fait, je vais chercher ce qui ne va pas après avoir rempli le gouffre qui me sert d'estomac, je viendrai poster la conclusion pour ceux que ça peut intéresser.

  12. #12
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    si sa marche heureux pour vous ;
    pour ton estomac essaye la cuisine de

    EDIT: les deux codes sont totalement différent

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Code corrigé et entièrement fonctionnel ... des fois je ferai mieux d'ouvrir les yeux avant de me lever, et pas seulement sur le coup de midi...

    L'erreur venait d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $centraleInsert->bind_param('ssdd', $nomCentrale, $lieuCentrale, $latitudeCentrale, $longitudeCentrale);
    J'avais des virgules excédentaires entre chaque caractère dans le premier paramètre de la fonction bind_param()...

    Merci pour ce petit coup de main, désolé d'avoir abusé de votre temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PPC][C#][Sql CE] erreur "no data exists for the row/column"
    Par Jessika dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/04/2007, 12h13
  2. Réponses: 3
    Dernier message: 24/11/2006, 18h20
  3. Invalid argument supplied for foreach()
    Par Rajhonson dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 14h31
  4. Réponses: 11
    Dernier message: 19/05/2006, 11h41
  5. [Configuration] Argument supplied for foreach()
    Par naourass dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 12/05/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo