Problème script PHP avec INSERT [Résolu/Fermé]

Signaler
Messages postés
3
Date d'inscription
dimanche 15 septembre 2013
Statut
Membre
Dernière intervention
17 septembre 2013
-
Messages postés
3
Date d'inscription
dimanche 15 septembre 2013
Statut
Membre
Dernière intervention
17 septembre 2013
-
Bonjour, cela fait 3 jours que je planche sur un script permettant d'insérer des données dans la BDD, en vue d'en faire une fonction.. Sauf qu'aucune donnée ne s'insère dans ma table ! Pouvez-vous m'aidez svp ? Voici mon script :





/ Connexion à la BDD
try
{
$bdd = new PDO('mysql:host=localhost;dbname=ju', '', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

// Déclaration des variables
$table = 'client';
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];


/* STRUCTURE DES CHAMPS POUR LA REQUETE INSERT
---------------------------------------------- */

$Fields = array();

// Récuperer les noms des champs d'une table
$req1 = $bdd->prepare('SELECT column_name FROM information_schema.columns WHERE table_name= ?');
$req1->execute(array($table));

while($data = $req1->fetch()) {

$Fields[] = $data['column_name'];
}
$req1->closeCursor();

// Transformer $Fields en chaîne de caractère dont les éléments sont séparés par une virgule
$fields = implode(",", $Fields);


/* STRUCTURE DES VALEURS POUR LA REQUETE INSERT
----------------------------------------------- */

$Values = array();

// Récuperer le nombre de champs d'une table
$req2 = $bdd->prepare('SELECT count(*) as nbr FROM information_schema.COLUMNS WHERE table_name= ?');
$req2->execute(array($table));
$data = $req2->fetch();
$req2->closeCursor();
$nbrFields = $data['nbr'];

// Ajouter ':' devant chaque champ
for ($i = 0; $i < $nbrFields; $i++)
{
$Values[] = ':'.$Fields[$i];
}

// Transformer $Values en chaîne de caractères dont les éléments sont séparés par une virgule
$values = implode(",", $Values);


/* STRUCTURE DU TABLEAU POUR LA REQUETE INSERT
---------------------------------------------- */

$Data = array ($prenom, $nom);
$Array = array();
$i = '';
$j = '';

// Ajouter '""' entre chaque champs
for ($i = 0, $j = 0; $i < $nbrFields && $j < $nbrFields; $i++, $j++)
{
$Array[$Fields[$i]] = $Data[$j];
}

// Insertion dans la BDD
$req3 = $bdd->prepare('"INSERT INTO'.$table.'('.$fields.') VALUES('.$values.')"');
$req3->execute($Array);

if($req3)
{
echo 'INSERT OK';
}
else
{
echo 'ERREUR';
}

2 réponses

Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
Salut,

A première vue la troisième requête n'est pas correcte :
$req3 = $bdd->prepare('"INSERT INTO'.$table.'('.$fields.') VALUES('.$values.')"'); 

Il y a une double quote au début et à la fin de la requête, est-ce normal ?
Il n'y a pas d'espace autour du nom de la table.

Je te conseil d'afficher ta requête pour vérifier si elle est bien construite comme ceci :

// Insertion dans la BDD
$sql3 = 'INSERT INTO '.$table.' ('.$fields.') VALUES ('.$values.')';
echo $sql3;
$req3 = $bdd->prepare($sql3);
$req3->execute();

Bonne journée
Messages postés
3
Date d'inscription
dimanche 15 septembre 2013
Statut
Membre
Dernière intervention
17 septembre 2013

En effet, c'était ces doubles quotes en trop qui faisaient tout buguer !

Merci beaucoup :)