JeuWeb - Crée ton jeu par navigateur
Erreur dans une requête SQL - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Erreur dans une requête SQL (/showthread.php?tid=2551)



Erreur dans une requête SQL - Kassak - 10-03-2008

Yop yop Smile

Un problème que j'essaye de résoudre depuis un petit moment, et que je trouve totalement incohérent...

J'ai une page boutique.php, ou il y a un insert dans la table inventaire :

Code PHP :
<?
mysql_query
("INSERT INTO inventaire VALUES('$pseudo_joueur','$id_item','$nombre','0','','0','normal')");
?>

Ça marche bien, et encore heureux^^J'ai besoin sur une autre page de faire la même requête, j'ai les mêmes variables etc... je copie colle, et la....4 3 2 0 PAF ! la pastèque ! Que dalle ça fait rien du tout.

2h que je cherche pourquoi la requête ne passe pas sur cette page, alors que c'est la même sur les deux pages...rien ne se passe, pas de messages d'erreur, mais rien dans la BDD, j'ai plein d'autre insert à coté, qui marchent, mais celui la, il fait chier, il veut pas xD

Ça sert a rien que je vous donne mon code, car tout marche, sauf CET INSERT sur CETTE page...pfffrrrrt , si vous avez des pistes? C'est le genre de problème qui me gonfle rapidement, surtout que quand j'ai codé ça, c'était parfait, la je retest et paf...


Et sinon, d'un point de vue performance, le fait de "classer" des données dans une table via un nom, un pseudo ou autre, même pour les jointures, ça fait pédaler un peu plus le serveur ou on s'en fout? Car je préfère avoir écrit en toute lettre dans un champ ce qu'il contient, et non des chiffres, mais je ne m'étais pas posé la question d'un point de vue performance !

Merci bien


RE: Pfff, requete à la con^^Et petite question - Ren Nelos - 10-03-2008

Bonjour Kassak.

En général, je ne suis pas motivé pour répondre quand ce n'est pas bien difficile, que le contexte n'est pas clairement posé ... Mais bon, j'ai un peu de temps et j'ai aimé l'ambiance du message.

Tout d'abord, il n'y a pas d'appel à la fonction mysql_error() dans ton script ? Si c'est le cas, merci de quand même afficher tes sources afin que l'on ne perde pas de temps à poser des questions qui auraient plus vite fait de trouver leurs réponses.

RN


RE: Pfff, requete à la con^^Et petite question - phenix - 10-03-2008

Probablement que c'est pas la requête qui bug mais le script qui ce trouve dans la page :heuuu:


RE: Pfff, requete à la con^^Et petite question - X-ZoD - 11-03-2008

voila
ren .. pareil des fois j'ai un peu la flemme XD
on aura qu'a s'alterner pour soulager l'un et l'autre Big Grin


RE: Pfff, requete à la con^^Et petite question - joshua - 11-03-2008

un truc tout con: fait reecrire la query en toute lettre dans la ligne juste en dessous en echo. Tu verras exactement ce qui passe et si ca passe.
La BDD, y'a pas de magie ^^


RE: Pfff, requete à la con^^Et petite question - Anthor - 11-03-2008

Avant de te poser la question sur les jointures, peut être devrait tu commencer par oublier les double quotes ^^
Ensuite pour les jointures on utilise l'id car ils sont plus rapidement indéxés, que des charactères


RE: Pfff, requete à la con^^Et petite question - Sephi-Chan - 11-03-2008

De toute façon, c'est toujours la même chose. Une requête, ça se débogue facilement :
Code PHP :
<?php 
$query
= sprintf(
"INSERT INTO inventaire (champ1, champ2, champ3)
VALUES('%s', %d, %d)"
,
mysql_real_escape_string($chaine),
(int)
$entier,
(int)
$entier
);

if(
mysql_query($query)){ echo "Ok."; }
else { echo
'<p>'.$query.'</p>'; echo '<p>'.mysql_error().'</p>'; }

Il faut penser à lister les champs que tu vas remplir, puis leurs valeurs. J'en profite que tu peux utiliser SET, comme dans un UPDATE pour affecter une valeur à un champ. C'est très pratique si tu es du genre tête en l'air, ça évite d'inverser 2 champs. Le sprintf() te permet d'appliquer tes fonctions de protection et de transtypage à la volée. Je pense que tu comprendras son fonctionnement en voyant l'exemple.

Pensez également à profiter des valeurs par défaut : un champ qui doit contenir la date d'inscription, ben on lui met la valeur par défaut (dans phpMyAdmin, par exemple) CURRENT_TIMESTAMP() et comme ça, pas besoin de s'en occuper dans la requête. De même pour les champs auto incrémentés. En clair : Utilises les valeurs par défaut (pour le 0 dans ton cas, par exemple.

Ensuite, on entoure de simples quotes les chaînes de caractères et les dates, pas les nombres.

Avec mon exemple, si la requête foire, ça te l'affiche et ça t'affiche l'erreur.

Enfin bref, je dirais pour finir que les débogages de requêtes sont toujours les mêmes, et qu'on répète toujours les même s choses pour les résoudre.


Sephi-Chan