Mysqli & insert into
maxireussite
Messages postés
372
Date d'inscription
Statut
Membre
Dernière intervention
-
maxireussite Messages postés 372 Date d'inscription Statut Membre Dernière intervention -
maxireussite Messages postés 372 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Toujours mon parcours du combatant de mysql à mysqli :
J'ai le message suivant

Merci de votre aide.
Toujours mon parcours du combatant de mysql à mysqli :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution periode, email) VALUES (?, ?, ,? ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
J'ai le message suivant

Merci de votre aide.
19 réponses
Bonjour
(?, ?, ,? ,? ,? ,? ,?)
Tu as une virgule en trop (deux virgules qui se suivent)
De plus, le nombre de ? devrait correspondre au nombre de champs.
Et «distribution periode» avec un espace n'est pas un bon nom de champ. Tu peux l'utiliser, mais à condition de le mettre entre accents graves (Alt Gr 7)
(?, ?, ,? ,? ,? ,? ,?)
Tu as une virgule en trop (deux virgules qui se suivent)
De plus, le nombre de ? devrait correspondre au nombre de champs.
Et «distribution periode» avec un espace n'est pas un bon nom de champ. Tu peux l'utiliser, mais à condition de le mettre entre accents graves (Alt Gr 7)
'lut, comme dit le message d'erreur,
La syntaxe de ta requête n'étant pas erronée, l'erreur vient de la connexion à la BDD, regarde du coté de mysqli_connect_error() pour savoir ce qui cloche.
mysqli_stmt_bind_params'attend a un objet de requête préparée en tant que 1er paramètre or elle a reçu un booléen, or le seul cas dans lequel
mysqli_preparerenvoie un booléen est quand elle échoue!
La syntaxe de ta requête n'étant pas erronée, l'erreur vient de la connexion à la BDD, regarde du coté de mysqli_connect_error() pour savoir ce qui cloche.
Waouh ! les choses se compliquent...
Voila mon script en intro de page :
Et ma (modeste) classe de connection :
Voila mon script en intro de page :
<?php ini_set('display_errors', true); error_reporting(E_ALL); require_once('../../koneksyon/konfig.php'); ?>
Et ma (modeste) classe de connection :
<?php //On demarre les sessions session_start(); $bdd = mysqli_connect('localhost', '*****', '*****', '*****'); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
On peut revoir la requête corrigée avant de dire qu'elle n'est pas erronée ?
D'ailleurs, même si la syntaxe est correcte, il peut y avoir une erreur dans un nom de table ou de champ.
mysqli et / ou mysqli_connect sont-ils à l'intérieur de fonctions ? Si oui, il faudrait déclarer global $bdd pour que la variable soit bien la même dans les deux cas.
D'ailleurs, même si la syntaxe est correcte, il peut y avoir une erreur dans un nom de table ou de champ.
mysqli et / ou mysqli_connect sont-ils à l'intérieur de fonctions ? Si oui, il faudrait déclarer global $bdd pour que la variable soit bien la même dans les deux cas.
Requête corrigée :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
Le message d'erreur est-il toujours le même qu'avant ?
Car tu as une erreur dans ton mysqli_stmt_bind_param.
extrait de la doc :
« Le nombre de variables et la longueur de la chaîne de caractères types doivent correspondre aux paramètres de la requête. »
Toi, ta chaîne types ("sis") n'a que 3 caractères, alors que tu as 7 paramètres.
Car tu as une erreur dans ton mysqli_stmt_bind_param.
extrait de la doc :
« Le nombre de variables et la longueur de la chaîne de caractères types doivent correspondre aux paramètres de la requête. »
Toi, ta chaîne types ("sis") n'a que 3 caractères, alors que tu as 7 paramètres.
Désolé, v'là la bonne requête :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
1 - je ne vois pas la différence entre cette dernière requête et la précédente
2 - je t'avais demandé si tu avais toujours le même message d'erreur, peux-tu répondre à cette question ?
3 - je t'ai fait remarquer une erreur sur le paramètre type, tu n'en parles pas et ne l'as pas corrigé. Est-ce que tu as lu ce que j'avais écrit ?
2 - je t'avais demandé si tu avais toujours le même message d'erreur, peux-tu répondre à cette question ?
3 - je t'ai fait remarquer une erreur sur le paramètre type, tu n'en parles pas et ne l'as pas corrigé. Est-ce que tu as lu ce que j'avais écrit ?
Bjr "le père", je te remercie de m'aider, mais saches que tu t'adresses à un Nul, un vrai.
Même pas foutu de te donner la bonne requête :) qui est la suivante :
Le message d'erreur est la suivante :

Même pas foutu de te donner la bonne requête :) qui est la suivante :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
Le message d'erreur est la suivante :

C'est incroyable comme tu ne tiens pas compte de ce que j'écris. Tu as toujours la même erreur sur le paramètre types, tu n'en parles toujours pas plus, c'est encore comme si je n'avais rien écrit.
Un progrès quand même : tu as copié le message d'erreur, et c'est toujours le même qu'au départ.
Ce qui m'étonne c'est qu'il n'y a pas de message d'erreur avant celui-ci, il devrait y en avoir un sur le mysqli_prepare. Peux-tu ajouter
après la ligne du mysqli_prepare et voir si un message d'erreur s'affiche ?
Un progrès quand même : tu as copié le message d'erreur, et c'est toujours le même qu'au départ.
Ce qui m'étonne c'est qu'il n'y a pas de message d'erreur avant celui-ci, il devrait y en avoir un sur le mysqli_prepare. Peux-tu ajouter
echo mysqli_error($bdd);
après la ligne du mysqli_prepare et voir si un message d'erreur s'affiche ?
Vraiment désolé, mais "paramètres type" je ne sais pas ce que c'est...
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page :
Voir le script d'intro dans le message n° 4 ci-dessus.
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? ,? ,? ,?)' at line 2
Voir le script d'intro dans le message n° 4 ci-dessus.
Bonjour,
<blocik>
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page
</block>
Non.. le message d'erreur parle d'un souci de ligne dans une syntaxe SQL (donc dans une requête) et non du numéro de ligne dans ton code source...
Le souci se situerait donc dans cette ligne de code :
As tu remarqué, par exemple... que tu avais deux virgules qui se suivent sans "?" à l'intérieur ??
<blocik>
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page
</block>
Non.. le message d'erreur parle d'un souci de ligne dans une syntaxe SQL (donc dans une requête) et non du numéro de ligne dans ton code source...
Le souci se situerait donc dans cette ligne de code :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)');
As tu remarqué, par exemple... que tu avais deux virgules qui se suivent sans "?" à l'intérieur ??
Il faut absolument que tu ajoutes du "debug" à tes instructions pour déterminer d'où vient le souci..
Essayes donc ceci :
Au passage... la première variable de l'array ( "sis" ) .. est sensée correspondre aux types de valeurs que tu vas passer dans ta requête.
Hors... je vois 8 variables... et seulement 3 lettres.....
Je pense que tu devrais refaire un tour ici pour comprendre : https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
Cordialement,
Jordane
Essayes donc ceci :
$sql = "INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?,?,?,?,?,?,?,?)"; $array_params = array( "sis" , $action , $genre , $age , $ville_id , $distribution , $periode , $email ); $req_pre = mysqli_prepare($bdd,$sql) or die(mysqli_error($bdd)); mysqli_stmt_bind_param($req_pre, join(',',$array_params)) or die(mysqli_error($bdd)); mysqli_stmt_execute($req_pre)or die(mysqli_error($bdd));
Au passage... la première variable de l'array ( "sis" ) .. est sensée correspondre aux types de valeurs que tu vas passer dans ta requête.
Hors... je vois 8 variables... et seulement 3 lettres.....
Je pense que tu devrais refaire un tour ici pour comprendre : https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
Cordialement,
Jordane
@Jordane 45
Avec ton script, je n'ai plus les tableaux d'erreur, mais ce message :
Unknown column 'ville_id' in 'field list'
MAIS : le reste de ma page ne s'affiche pas...
ET la base de données et la table eg_anonyme n'enregistre RIEN...
A propos de "SIS"
Dois mettre : SSIISSS pour
Caractères - champs - réponse possible
s - action -agir
s - genre - h
i - age - 59
i - ville_id - 12
s - distribution - oui
s - période - mai-juin
s - email - omrce@agir.com
Avec ton script, je n'ai plus les tableaux d'erreur, mais ce message :
Unknown column 'ville_id' in 'field list'
MAIS : le reste de ma page ne s'affiche pas...
ET la base de données et la table eg_anonyme n'enregistre RIEN...
A propos de "SIS"
Dois mettre : SSIISSS pour
Caractères - champs - réponse possible
s - action -agir
s - genre - h
i - age - 59
i - ville_id - 12
s - distribution - oui
s - période - mai-juin
s - email - omrce@agir.com
$sql = "INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?,?,?,?,?,?,?)"; $array_params = array("ssiisss" , $action , $genre , $age , $ville_id , $distribution , $periode , $email); $req_pre = mysqli_prepare($bdd,$sql) or die(mysqli_error($bdd)); mysqli_stmt_bind_param($req_pre, $array_params) or die(mysqli_error($bdd)); mysqli_stmt_execute($req_pre)or die(mysqli_error($bdd));
J'imagine que tu veux parler de "sis" ?
Si je le remet tel quel, cela ne change pas, j'ai tjrs le message d'erreur...
Si je le remet tel quel, cela ne change pas, j'ai tjrs le message d'erreur...
Bonjour
join(',',$array_params) ne fait pas la même chose que d'écrire n paramètres séparés par des virgules. join génère une seule chaîne.
En fait, l'écriture originale
join(',',$array_params) ne fait pas la même chose que d'écrire n paramètres séparés par des virgules. join génère une seule chaîne.
En fait, l'écriture originale
mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email);, après correction du "sis", était la bonne.
Le dénouement approche et j'espère que le héros ne meurt pas à la fin du film...
@Jordane45, en procédant à la correction le message d'erreur demeure...
@le père, en faisant correction, c-à-d en revenant à l'original j'ai les messages ci-dessous...
Corriger le SIS est-ce que cela veut dire le remplacer par "ssiisss" ?

@Jordane45, en procédant à la correction le message d'erreur demeure...
@le père, en faisant correction, c-à-d en revenant à l'original j'ai les messages ci-dessous...
Corriger le SIS est-ce que cela veut dire le remplacer par "ssiisss" ?
