Mysqli & insert into

Fermé
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 7 nov. 2015 à 16:44
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 13 nov. 2015 à 20:49
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

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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
7 nov. 2015 à 22:51
J'ai corrigé, mais cela ne change rien le message d'erreur demeure...
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 226
7 nov. 2015 à 23:52
'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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
8 nov. 2015 à 00:28
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
8 nov. 2015 à 01:26
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 8/11/2015 à 04:31
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
8 nov. 2015 à 07:45
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 8/11/2015 à 18:13
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
8 nov. 2015 à 22:20
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
8 nov. 2015 à 22:54
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
8 nov. 2015 à 23:59
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
9 nov. 2015 à 01:28
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 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
9 nov. 2015 à 02:02
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
9 nov. 2015 à 02:22
Merci pour la virgule, mais cela ne change pas grand chose, voici le nouveau message d'erreur :

0
jordane45 Messages postés 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
Modifié par jordane45 le 9/11/2015 à 02:37
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 9/11/2015 à 03:32
@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 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
9 nov. 2015 à 10:42
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
9 nov. 2015 à 12:31
Après correction, nouveau message d'erreur :

0
jordane45 Messages postés 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
9 nov. 2015 à 12:51
Tu peux poster ton code ?
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
9 nov. 2015 à 16:58
$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 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
9 nov. 2015 à 17:49
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 9/11/2015 à 18:18
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 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
9 nov. 2015 à 18:26

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 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024
9 nov. 2015 à 18:31
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
9 nov. 2015 à 18:59
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
13 nov. 2015 à 20:49
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