Bonjour,
J'obtiens systématiquement une erreur de MySQL (Ressource id #4) lorsque je tente d'insérer:
$sql = "INSERT INTO classement (num_jeu, j1, j2, j3, j4) VALUES ('$num_jeu', '$j1', '$j2', '$j3', $j4)";
Un echo de ces variables ne pose pas de problème pour sa part. Je suppose qu'il s'agit d'un problème de syntaxe, mais je crois les avoir toutes essayées.
L'un d'entre-vous pourrait-il m'aider ?
Merci beaucoup par avance.
dl
Salut, il me semble syntaxe correct est :
$sql = "INSERT INTO classement (num_jeu, j1, j2, j3, j4) VALUES ('" .$num_jeu. "', '" .$j1. "', '" .$j2. "', '" . $j3. "', '" *$j4."')";
Les variables sont entre apostrophes donc déjà il prendra pas leur valeur.
Et la variable 4 est la seule sans apostrophe. C'est sûrement lié
Le 24 avril 2017 à 10:57:37 GrandeGuerre a écrit :
Les variables sont entre apostrophes donc déjà il prendra pas leur valeur.
(je pense bien que si)
Merci pour votre réponse.
Sorry pour le $J4, sans apostrophe, c'est une erreur de recopiage. Il l'était à l'origine.
J'ai essayé la syntaxe proposée par Bartoniz, qui m'apportait quelque chose de nouveau par rapport à ce que j'ai déjà essayé, c'est à dire les espaces entre l'apostrophe et le point de concatenation. => Résultat: Erreur Ressource #3 (c'était #4 avant cela)...
(mon but est évidemment d'arriver à erreur #0 ;-))
Merci pour votre aide.
Le 24 avril 2017 à 11:03:26 arsh222 a écrit :
Le 24 avril 2017 à 10:57:37 GrandeGuerre a écrit :
Les variables sont entre apostrophes donc déjà il prendra pas leur valeur.(je pense bien que si)
Sauf erreur de ma part, une variable entre apostrophes n'est pas traitée comme une variable mais comme du texte.
http://stackoverflow.com/questions/3446216/what-is-the-difference-between-single-quoted-and-double-quoted-strings-in-php
C'est possible que je m'emmele les pinceaux car j'ai la syntaxe Java en tête ^^, car en Java c'est :
" SELECT * FROM test WHERE a = ' " +variable+ " ' ";
Du coup essaye d'enlever les ' ;)
Aucun moyen de passer par une requête préparée ? Ça te faciliterai vraiment la tâche.
J'avoue ignorer ce qu'est une "requête préparée" (j'imagine sans les variables?). De manière plus complète, voici où j'en suis:
Dans du contenu stocké dans ma première table de ma BDD (MySQL), je récupère des textes afin de savoir combien de fois 4 joueurs sont cités
$requete = mysql_query("SELECT * FROM jeu_de_bois");
While($ligne = mysql_fetch_assoc($requete))
{
$num_jeu = $ligne[num_jeu];
$contenu_texte = $ligne[contenu_texte];
Pour cela pas de problème. Je continue ensuite, toujours dans ma boucle de While afin de déclarer:
$j1 = substr_count($contenu_texte, 'Antoine');
$j2 = substr_count($contenu_texte, 'Fabrice');
$j3 = substr_count($contenu_texte, 'Valérie');
$j4 = substr_count($contenu_texte, 'Martine');
Jusque là, tout est ok. Et produire l'affichage n'a pas posé de problème, via:
echo '<tr><td>$num_jeu</td><td>$j1</td><td>j2</td><td>j3</td><td>j4</td></tr>'; // j'ai pris soin de mettre <table> avant ma requête et </table> après ma boucle while.
Là où cela devient embarrassant, c'est lorsque je veux encoder ces données recueillies dans une nouvelle table appelée classement:
$sql = "INSERT INTO classement (num_jeu, j1, j2, j3, j4) VALUES ('$num_jeu', '$j1', '$j2', '$j3', '$j4')";
} // fin de la boucle
C'est en effet là que le navigateur m'indique Erreur Ressource #4 et que l'insertion dans la nouvelle table ne s'effectue pas.
Le but ultime, en réalité, c'est d'aller chercher dans une table (jeu_de_bois) le nombre de fois que j1, j2, j3 et j4 apparaissent dans la colonne vainqueur et produire ce résultat dans une nouvelle table (classement) où chaque joueur (j1, j2, j3 et j4) a sa colonne.
Bien sûr, un count(*) sur jointure pourrait faire l'affaire, mais je ne m'y risque plus, tant cela me dépasse (les deux tables ont une colonne commune), raison pour laquelle je me suis retranché sur substr_count qui reprend également les données.
J'espère avoir été suffisamment compréhensible ;)
Et encore merci !
c'est à quel moment que tu exécutes la requête insert ?
sinon essaie de faire un echo de $sql et exécute-le directement dans phpmyadmin ou autre interface de ton serveur mysql pour voir si la requête est correcte.
Si les colonnes num_jeu et j1 - j5 sont des INTEGER dans ta table, le fait de mettre des guillemets/apostrophes autour de '$j1'
etc cause peut-être le problème
J'ai en effet modifié INT en VARCHAR et j'ai extrait toutes les apostrophes qui entouraient mes variables.
=> résultat: Erreur Ressource #3 cette fois, mais au moins l'insert dans la DB s'est effectué. Mystérieux. Mais, cela me convient :o)
Encore merci.
essaye
$sql = "INSERT INTO `classement`
(`num_jeu`, `j1`, `j2`, `j3`, `j4`)
VALUES
("'.$num_jeu.'", "'.$j1."', "'.$j2.'", "'$.j3."', "$.j4.'");";
je remarque en tapant cette ligne qu'il manque le ';' pour fermer ta requete sql un oublis de recopiage egalement ?
Le 24 avril 2017 à 17:56:56 dlefebure a écrit :
J'ai en effet modifié INT en VARCHAR et j'ai extrait toutes les apostrophes qui entouraient mes variables.
fais l'un ou l'autre, inutile de faire les deux