Concaténation dans une requête SQL

Résolu
BenamourJr Messages postés 31 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 18 septembre 2010 - 30 mars 2010 à 01:29
BenamourJr Messages postés 31 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 18 septembre 2010 - 30 mars 2010 à 11:26
Bonsoir !

J'essaye depuis quelques temps de faire fonctionner une requête SQL... en vain :s
Dans mon code je récupère deux types de variables provenant d'un formulaire (des $_POST['lien1'], $_POST['lien2'], $_POST['lien3'],... et ainsi de suite ainsi que des $_POST['id1'], $_POST['id2'],...) que j'utilise dans une requête SQL que voici :

<?php
for ($nb_lignes = 1; $nb_lignes <= $_POST['nb_liens']; $nb_lignes++)
{
$table = $_POST['lien' . $nb_lignes . ''];
$id2 = $_POST['id' . $nb_lignes . ''];
$requete = "INSERT INTO ".$table."(id_article, id2) VALUES('".$_GET['id']."', '".$id2."')";
echo $requete . '
'; // que j'ai inséré pour y voir plus clair dans mon erreur
$bdd->exec($requete);
}
?>


l'echo $requete me retourne ceci quand $_POST['nb_liens'] vaut par exemple 3 :

INSERT INTO article_presse_dossier(id_article, id2) VALUES('47', '5')
INSERT INTO article_presse_individu(id_article, id2) VALUES('47', '2')
INSERT INTO article_presse_dossier(id_article, id2) VALUES('47', '2')

Ce qui me semble tout à fait correct, puis que j'ai les champs 'id_article' et 'id2' dans les deux tables concernées. Seulement voila, rien n'est ajouté dans mes tables... ca ne fonctionne pas :s

Si quelqu'un pouvait m'aider à trouver mon erreur je lui en serais vraiment très reconnaissant, merci ! :)
A voir également:

2 réponses

Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 mars 2010 à 09:19
Bonjour,

As tu essayé dans un premier temps le retour d'erreur SQL pour voir si tout allais bien :
<?php
$bdd->exec($requete) or die(print_r($bdd->errorInfo(), true));
?>


_________________________________
Min iPomme
3
BenamourJr Messages postés 31 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 18 septembre 2010 1
30 mars 2010 à 11:26
en effet, j'ai ajouté un petit or die(print_r($bdd->errorInfo(), true)) et j'ai directement vu d'où venait mon erreur (le nom de mon champ c'est id_article_presse et non id_article... xD). Merci en tout cas :)

Par contre maintenant j'ai un autre problème :s j'ai utilisé les requêtes préparés mais apparemment je ne peux pas les utiliser pour la variable contenant le nom de ma table, ca donne donc ceci :

<?php
for ($nb_lignes = 1; $nb_lignes <= $_POST['lien']; $nb_lignes++)
{
$table = $_POST['lien' . $nb_lignes . ''];
$id2 = $_POST['id' . $nb_lignes . ''];
$req_link = $bdd->prepare("INSERT INTO ".$table." (id_article_presse, id2) VALUES(:id_article_presse, :id2)") or die(print_r($bdd->errorInfo(), true));
$req_link->execute(array('id_article_presse' => $_GET['id'], 'id2' => $id2)) or die(print_r($bdd->errorInfo(), true));
$req_link->closeCursor();
}
?>


Le code fonctionne mais ca ne me plait pas de laisser la variable table directement dans la requête. Le problème c'est que si je remplace ".$table." par :table et que j'ajoute 'table' => $table à l'execute, ca ne marche pas...

J'ai aussi essayer de rajouter la ligne $table = mysql_real_escape_string($table); mais dans ce cas mon code ne fonctionne plus non plus...

Comment dois-je faire pour sécuriser cette variable ?
0
Rejoignez-nous