[RESOLU] Erreur dans execute data

NinitDUT
Invité n'ayant pas de compte PHPfrance

03 déc. 2021, 22:20

Bonjour,

Je suis en deuxième année de DUT Réseau et Télécommunication. Pour mon projet de fin d'étude je dois faire une LAN. Je suis chargé de faire pour le moment le site web avec une base de donnée en MySQL. Une fois mon formulaire fait et que j'essaye de l'envoyer dans ma BDD il y a ce message d'erreur :
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp64\www\lan\php\ajouteEquipeMC.php on line 17

Je vous joint mon code :
<?php
include '../template/connect.php';

$Equipe_nom_Mc = $_POST['NomEquipeMC'];
$Pseudo_Capitaine = $_POST['capitaine'];
$Pseudo_tm1 = $_POST['TeamMate1'];
$Pseudo_tm2 = $_POST['TeamMate2'];
$data = [
'Equipe_nom_Mc' => $Equipe_nom_Mc,
'Pseudo_Capitaine' => $Pseudo_Capitaine,
'Pseudo_tm1' => $Pseudo_tm1,
'Pseudo_tm2' => $Pseudo_tm2,
];
echo "$Equipe_nom_Mc, $Pseudo_Capitaine, $Pseudo_tm1, $Pseudo_tm2";
$sql = "INSERT INTO equipe_mc (Equipe_nom_Mc, Pseudo_Capitaine, Pseudo_tm1, Pseudo_tm2) VALUES (:Equipe_nom_Mc, :Pseudo_Capitaine, :Pseudo_tm1, Pseudo_tm2)";
$stmt= $dbh->prepare($sql);
$stmt->execute($data);
?>

Si des personnes ont déjà eu cette erreur je veux bien un peu d'aide car je sèche un peu...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 déc. 2021, 22:39

Le nombre de paramètres que tu passes dans le execute() ne correspond pas au nombre de paramètres attendus dans ta requête SQL.
Indice : il manque un caractère qq part ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

ninitDUT
Invité n'ayant pas de compte PHPfrance

04 déc. 2021, 17:04

En effet, merci.

Par contre il y a qqch de surprenant ma bdd ne s'incrémente pas, aucune erreur, je peu allez récupérer des informations de la bdd mais pas l'incrémenter....

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 déc. 2021, 23:14

As tu bien mis un champ en autoincrement ?
Quand tout le reste a échoué, lisez le mode d'emploi...

ninitDut
Invité n'ayant pas de compte PHPfrance

06 déc. 2021, 09:48

Oui j'ai un champ en auto_increment ...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 déc. 2021, 11:38

Teste ta requête dans phpmyadmin.
Si ton champ est bien en format INT (ou assimilé) et en AUTOINCREMENT il va forcément s'incrémenter.


Si tu bloques toujours, dans phpmyadmin, fait un export SQL de la structure de ta table
Quand tout le reste a échoué, lisez le mode d'emploi...

NinitDUT
Invité n'ayant pas de compte PHPfrance

07 déc. 2021, 13:49

Bonjour,

Quand je fait ma requête SQL dans ma bdd celle si s'incrémente. Mais toujours impossible de l'incrémenté. Je vous join ma bdd en sql :
-- phpMyAdmin SQL Dump
-- version 5.0.2
--
-- Hôte : 127.0.0.1:3306
-- Généré le : mar. 07 déc. 2021 à 11:42
-- Version du serveur : 5.7.31
-- Version de PHP : 7.4.9

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de données : `lan`
--

-- --------------------------------------------------------

--
-- Structure de la table `equipe_mc`
--

DROP TABLE IF EXISTS `equipe_mc`;
CREATE TABLE IF NOT EXISTS `equipe_mc` (
`ID_equipe_MC` int(11) NOT NULL AUTO_INCREMENT,
`Equipe_nom_Mc` varchar(50) NOT NULL,
`Pseudo_Capitaine` varchar(50) NOT NULL,
`Pseudo_tm1` varchar(50) NOT NULL,
`Pseudo_tm2` varchar(50) NOT NULL,
`Date_de_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`MDP_Mumble` varchar(50) NOT NULL,
PRIMARY KEY (`ID_equipe_MC`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

--
-- Déchargement des données de la table `equipe_mc`
--

INSERT INTO `equipe_mc` (`ID_equipe_MC`, `Equipe_nom_Mc`, `Pseudo_Capitaine`, `Pseudo_tm1`, `Pseudo_tm2`, `Date_de_creation`, `MDP_Mumble`) VALUES
(1, 'les Zinzins', 'tes1', 'test2', 'test3', '2021-12-07 11:42:20', 'test');
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

J'ai pensé utilisé les commande Mysql_connect /M,ysql_insert mais en faisant des recherches dessus je trouve que se sont des commande ancienne....

Mammouth du PHP | 2703 Messages

07 déc. 2021, 13:55

la requête qui ne fonctionne pas, à tester dans phpmyadmin pour que phpmyadmin dise ce qui ne va pas.
INSERT INTO equipe_mc (Equipe_nom_Mc, Pseudo_Capitaine, Pseudo_tm1, Pseudo_tm2) VALUES (:Equipe_nom_Mc, :Pseudo_Capitaine, :Pseudo_tm1, Pseudo_tm2)

la requête qui fonctionne :
INSERT INTO `equipe_mc` (`ID_equipe_MC`, `Equipe_nom_Mc`, `Pseudo_Capitaine`, `Pseudo_tm1`, `Pseudo_tm2`, `Date_de_creation`, `MDP_Mumble`) VALUES
(1, 'les Zinzins', 'tes1', 'test2', 'test3', '2021-12-07 11:42:20', 'test');

NinitDUT
Invité n'ayant pas de compte PHPfrance

09 déc. 2021, 23:11

Merci pour votre aide mon formulaire fonctionne correctement maintenant. :D