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   -
Bonjour,

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

Utilisateur anonyme
 
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)
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
J'ai corrigé, mais cela ne change rien le message d'erreur demeure...
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, comme dit le message d'erreur,
mysqli_stmt_bind_param
s'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_prepare
renvoie 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.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Waouh ! les choses se compliquent...

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', '*****', '*****', '*****');
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
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.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
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);
 
0
Utilisateur anonyme
 
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.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
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);


0
Utilisateur anonyme
 
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 ?
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
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 :

$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 :

0
Utilisateur anonyme
 
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

echo mysqli_error($bdd);

après la ligne du mysqli_prepare et voir si un message d'erreur s'affiche ?
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
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 :

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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 :
$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 ??
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci pour la virgule, mais cela ne change pas grand chose, voici le nouveau message d'erreur :

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Il faut absolument que tu ajoutes du "debug" à tes instructions pour déterminer d'où vient le souci..

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
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
@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
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Normal que rien ne s'affiche après le message d'erreur. .. je t'ai fait mettre des DIE....
et pour ce qui est du message d'erreur. .il est assez clair non ??!!.. tu n'as aucune colonne dans ta table qui se nomme ville_id.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Après correction, nouveau message d'erreur :

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu peux poster ton code ?
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
$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));



0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
C'est bien ce qui me semblait. ...
compare ton code avec celui quie j'ai posté sur le forum...

je n'ai pas laissé l'Array tel quel.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
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...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

J'imagine que tu veux parler de "sis" ?

Non

Regardes ce que tu as écris à la ligne :
mysqli_stmt_bind_param($req_pre, $array_params)  or die(mysqli_error($bdd));				

Et moi :
mysqli_stmt_bind_param($req_pre, join(',',$array_params))  or die(mysqli_error($bdd));
0
Utilisateur anonyme > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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
mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email);
, après correction du "sis", était la bonne.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
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" ?

0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Eh ben, on dirait bien que le héros meurt à la fin du film.

je vais être obligé de revenir à MysQl, au moins là, mes script fonctionnent...

Jusqu'ici tout va bien ...
0