Derniere erreur et ca risque de marcher... [Résolu]

Signaler
-
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
-
Bonsoir,

soit le code ci dessous
<?php
    $link = mysqli_connect('localhost', 'root', '', 'essai');// le dernier parametre est le nom de la base

    /* Vérification de la connexion */
    if (!$link)
    {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    }

    mysqli_select_db($link, "essai");// NE PAS OUBLIER CETTE LIGNE QUI N'EST PAS DANS L'EXEMPLE !!
    //Le problème venait de la ligne ci-dessous qui renvoit faux dans $stmt! LE NOMBRE DE ? ETAIT ERRONNE, IL EN MANQUAIT UN !!!
    $stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?, ?)");
    if ($stmt == false)
    {
        echo "faux renvoyé";
    }
   
    $code = 'DEU';
    $language = 'Bavarian';
    $official = "F";
    $percent = 11.2;

    // Permet de lier les variables passées en paramètre à  la requête !
    mysqli_stmt_bind_param($stmt, 'ssd', $code, $language, $official, $percent);
 
    /* Exécution de la requête préparée */
    mysqli_stmt_execute($stmt);

    printf("%d ligne insérée.\n", mysqli_stmt_affected_rows($stmt));

    /* Fermeture de la commande */
    mysqli_stmt_close($stmt);

    /* Nettoyage de la table Langage */
    //mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
    //printf("%d ligne effacée.\n", mysqli_affected_rows($link));

    /* Fermeture de la connexion */
    mysqli_close($link);
?>

A l'execution, je récupère ce message d'erreur que je ne comprends pas, donc j'arrive pas a corriger :

Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of elements in type definition string doesn't match number of bind variables in /var/www/essai/index.php on line 24

0 ligne insérée.

Si qq'un pouvrait me remettre sur les rails....

SL

5 réponses

Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

Dans le type de la fonction mysqli_stmt_bind_param, tu donnes la valeur 'ssd' ce qui signifie que la fonction recevra 2 variable string puis 1 variable décimale. 
Je ne connais pas le type de tes 4 variables mais il manque surement une lettre dans type   

Bonne Prog
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

bah ouais, déjà, y a sssd, puis tu proposes 5 remplacements (5 ?), et seulement 4 variables. D'où le message assez clair pourtant... ;-)

je croyais que ssd était un des paramètres moi.... (j'ai recherché un exemple mais pas assez commenté du coup). Donc si je comprends bien, ssd veut dire string-string-decimal

bon, je n'ai plus qu'un Warning.... A voir ce que c'est

Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of variables doesn't match number of parameters in prepared statement in /var/www/essai/index.php on line 31

0 ligne insérée.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
C'est ce que je te disais : tu bindes 4 paramètres alors que tu en mets 5 dans ta requête.
et l'option c'est sssd, pas ssd.
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

Je te conseille d'aller jeter un coup d'oeil sur la doc de la fonction mysqli_stmt_bind_param et mysqli_prepare

L'erreur que tu as est l'inverse de celle d'hier, apparemment tu annonce 5 variable dans la fonction mysqli_prepare et tu n'en donnes que 4 dans msqli_stmt_bind_param, donc ca plante.

Bonne Prog