j'arrive pas a faire une simple requette mysql ?? [PHP] - PHP - Programmation
Marsh Posté le 28-03-2003 à 23:32:10
le nom de ta table n'est pas standard.
cherche le caractère d'échappement de MySQL.
Sous Oracle, c'est le guillement "..." et sous MSSQL Server c'est les crochets [...]
Ca doit venir de là.
Marsh Posté le 28-03-2003 à 23:35:53
tu parle du - dans counter-ip ?
Marsh Posté le 28-03-2003 à 23:50:15
Déja, il serait judicieux de tester le résultat de mysql_query :
$res = mysql_query("INSERT INTO counter-ip (ip, date) VALUES ($current_ip, NOW())" );
if (! $res) {echo "Erreur durant l'execution de la requete";}
Ca permettrait de vérifier si la requête s'exécute correctement ou pas
Marsh Posté le 28-03-2003 à 23:57:14
ben... il me fait une erreur
bon je vais verifier tout ca et je reposte demain, pask la je suis un peu fatigué....
Marsh Posté le 29-03-2003 à 12:13:52
Big-Foot a écrit : tu parle du - dans counter-ip ? |
Oui, le "-" c'est l'opérateur "moins", et à partir de là, MySQL doit pas aimer des masses.
Donc il faut mettre le nom de la table dans entre caractères d'échappement pour lui indiquer qu'il s'agit d'un nom et non pas d'une expression.
Marsh Posté le 29-03-2003 à 13:55:30
j'ai essayé avec un truc tout simple dans une table avec un nom sans "-" et ca marche. (donc tout ce ki est connnection a la bdd c'est bon)
Pour les caracteres d'echapement mysql, c'est le "\".
http://dev.nexen.net/docs/mysql/an [...] syntax.php
mais si je met "counter\-ip" ca marche toujour pas...
voila ce que j'ai essayé :
Code :
|
Marsh Posté le 29-03-2003 à 14:03:02
'counter-ip' sous reserve ...
essaie dinserer ds phpmyadmin en utlisant longlet inserer, et utilise leur requete.
Marsh Posté le 29-03-2003 à 14:27:31
j'avais deja essayer le 'counter-ip' sous reserve
mais merci je savais pas que phpmyadmin ecrivait les requettes aussi...
ben maintenent ca marche merci ! le probleme venait des ' ' je crois
ca donne ca :
Code :
|
mais je me pose quelques questions :
y a t'il une difference entre les ' ' et le ´ ´ ?
est ce que quand je met une variable dans les VALUES je doit toujour mettre les ' ' ?
merci
Marsh Posté le 29-03-2003 à 14:36:01
Il faut encadrer avec ' ' les chaines de caractères et les dates, mais pas les entiers.
SELECT * FROM table WHERE txt = 'coucou' AND entier = 2
Dans les chaines de caractères, il faut protéger les ' par un \ ('aujourd\'hui'. Mais le plus simple est de systématiquement utiliser la fonction php addslashes quand tu gères des chaines de caractères :
$requete = "SELECT * FROM table WHERE txt = '" . addslashes($param_txt) . "' AND entier = " . $param_txt;
Marsh Posté le 29-03-2003 à 15:08:25
mrBebert a écrit : Il faut encadrer avec ' ' les chaines de caractères et les dates, mais pas les entiers. |
bigfoot > a oui ct ` et non pas '
tu peux entourer les entier par des '', ca evite les id = $id or 1 meme si je le fais jamais
sytematiquement addslashes, ok mais si magical_quotes est pas activé sinon ya redondance
Marsh Posté le 29-03-2003 à 18:08:04
ok merci beaucoup
j'ai aussi remarqué que quand j'insere NOW() dans la table ca marche que si NOW() n'est pas entouré de '', c'est comme ca avec toute les fonction mysql j'imagine ? mais pour les fontion php ?
Marsh Posté le 29-03-2003 à 18:12:29
Big-Foot a écrit : ok merci beaucoupj'ai aussi remarqué que quand j'insere NOW() dans la table ca marche que si NOW() n'est pas entouré de '', c'est comme ca avec toute les fonction mysql j'imagine ? mais pour les fontion php ? |
Effectivement, il faut mettre une date entre '' quand tu la précise explicitement. Pour NOW(), il faut pas.
Mais Ca n'a rien à voir avec les fonction PHP. Ta requête, c'est toujours une chaîne de caractères.
beleg > Ca marche comment magic_quotes
Marsh Posté le 29-03-2003 à 20:15:05
Active l'option "magic_quotes" pour les méthodes GPC (GET/POST/COOKIE) Lorsque les magic_quotes sont activées, les caractères ' (simple quote), " (double quote), \ (backslash) et NUL sont précédés automatiquement d'un backslash
donc si get_magic_quotes_gpc() pas besoin de addslashes avant insertion dans la base, c deja fait.
mais si tu veux afficher les données du formulaire, pour verification par exemple, si get_magic_quotes_gpc(), alors il faut faire un stripslahes avant laffichage sinon tu te retrouves avec des \ et plus tu valides plus ten as, jai decouvert ce probleme ds mes formulaires hier ...
donc demain verification de \ ' "
Marsh Posté le 29-03-2003 à 20:46:22
dans ce cas :
Code :
|
qu'est ce que je doit mettree entre '' ou entre `` ?
Marsh Posté le 29-03-2003 à 20:55:15
name, c'est du texte (char, varchar, text) ?
Si oui, faut mettre test entre ''
Marsh Posté le 29-03-2003 à 20:58:48
name j'ai inventé c'est juste pour savoir ce que je devrait faire quand ce n'est rien d'aurtre que du texte disons varchar...
mais pour le reste je laisse comme ca sans rien ?
Marsh Posté le 29-03-2003 à 21:12:28
oki
mais regardez ici :
Code :
|
c'est juste ce que j'ai ecrit nan ?
pourtant il ne fait rien... ca devrait ajouter +1, mais ca fait rien meme pas une petit erreur et ma table reste comme avant
Marsh Posté le 29-03-2003 à 21:33:25
oui
D'ailleurs, je crois pas que cette condition soit accepté par mysql
Marsh Posté le 29-03-2003 à 21:36:30
je croi que j'ai vu kek part qu'elle est accepté...
mais si je met pas les ' ' il me fait une erreur
Marsh Posté le 29-03-2003 à 21:40:31
la par exemple (en bas)
http://www.php.net/manual/fr/function.max.php
il y a kek'un qui utilise max()avec mysql
Marsh Posté le 29-03-2003 à 21:56:31
Pourquoi tu mets une fonction PHP dans une requête
mysql fait du SQL, pas du PHP
Et la fonction max() de SQL, elle s'utilise pas de cette manière. Tu veux faire quoi comme requête ?
Marsh Posté le 29-03-2003 à 21:59:40
ben moi je voulai selectionner la derniere ligne de la table... autrement dit le dernier id
Marsh Posté le 29-03-2003 à 22:06:05
T'es obligé de faire 2 requêtes :
- 1 qui récupère le dernier id (SELECT max(id) FROM `counter-total`)
- 1 autre qui fait le update (UPDATE ... SET ... WHERE id = la_valeur_recupere_par_mla_requete_precedente)
A moins que tu n'ais une version suffisamment récente de mysql pour faire ca :
UPDATE ...
SET ...
ORDER BY id DESC
LIMIT 0, 1
Marsh Posté le 29-03-2003 à 22:10:03
alors le max(id) je peu l'utliser dans un SELECT mais pas dans un WHERE ??
et pour la 2eme methode tu peu preciser un peu stp (ou une url) merci
Marsh Posté le 29-03-2003 à 22:15:08
Oui, le max() fait partie des fonctions d'aggrégation. C'est à dire des fonction qui portent sur plusieurs lignes, en les regroupant.
Par exemple, en écrivant "SELECT max(id) from table", ca te renvoie une seule ligne, contenant la valeur maximale de id.
Toutes les lignes du résultat sont regroupées en une seule.
Parmi ces fonctions, tu as aussi :
- count(*) qui renvoie le nombre de lignes
- sum(champ) qui additionne les champs
- avg (la moyenne) ....
Elles sont souvent utilisées avec le GROUP BY, qui permet d'avoir plusieurs groupes de lignes.
Pour la 2ème méthode, au lieu de modifier la ligne ayant le plus grand id, je demande à modifier les lignes dans l'ordre décroissant de l'id, et en s'arrêtant dès qu'une a été modifiée
Pour faire du SQL, souvent, faut être bon en français et savoir reformuler différemment ce que tu veux faire
Marsh Posté le 29-03-2003 à 22:19:10
mais pour le max(id) il n'y aura qu'un seul resultat alors ou est le probleme ?
Marsh Posté le 29-03-2003 à 22:23:30
oui, mais le max se fait dans le select, pas dans le WHERE.
Le serveur SQL détermine d'abord quelles lignes respectent le WHERE, puis ensuite calcule le max() (ou le count(), sum() ...) sur ces lignes.
Mais il peut pas calculer le max() tant qu'il a pas fini avec les WHERE.
Si tu avais les requêtes imbriquées, ca pourrait s'écrire sous la forme :
SELECT ... FROM ... WHERE id = (SELECT max(id) FROM table)
Marsh Posté le 29-03-2003 à 22:27:02
ah... ok
alors je vais utiliser ton autre truc :
UPDATE ...
SET ...
ORDER BY id DESC
LIMIT 0, 1
Marsh Posté le 29-03-2003 à 22:36:59
c'est juste comme ca ?
Code :
|
pask ca marche pas... il y a un probleme avec la fin, a partir de ORDER BY...
et puis j'ai pas tres bien compris le LIMIT 0, 1
Marsh Posté le 30-03-2003 à 00:25:28
Ca doit dépendre de ta version de mysql, c'est une syntaxe assez "récente"
Le LIMIT permet de se limiter à certaines lignes du résultat. C'est très pratique pour certaines requête où tu n'as besoin que de certaines lignes du résultat, et pas toutes. Par exemple, si tu as beaucoup de données et que tu veux une consultation page par page.
Le premier paramètre du LIMIT est la ligne de départ, le deuxième le nombre de lignes à prendre.
Par exemple, sur ce forum, tu n'as pas la liste de tous les topics d'une catégorie, mais seulement, disons, 20 par page. avec un paramètre dans l'URL pour le numéro de page.
On pourrait imaginer que dans la requête, il y ait
"... LIMIT 0, 20" pour la première page, "... LIMIT 20, 20" pour la deuxième, "... LIMIT 40, 20" pour la troisième
Marsh Posté le 30-03-2003 à 01:07:30
ok, mais pour definir la limite "fin", si on veut afficher tout le tableau, on peut seulement mettre un grand chiffre ou bien auparavant faire une requette SELECT max(id) ce qui sera identique a la premiere technique nan (celle ou on selectione le max dans 1 requette puis dans 1 autre on le modifie) ?
Marsh Posté le 30-03-2003 à 01:22:42
Effectivement, il y a un problème si on ne sait pas à l'avance combien il y a d'éléments en tout
Le plus simple est de passer une fois la requête en faisant un count(*) pour savoir combien d'éléments sont concernés, puis la requête elle même avec les limites que l'on veut. Mais ca oblige à exécuter 2 fois la requête
Marsh Posté le 30-03-2003 à 01:28:34
arf ben faudra s'en contenter jusqu'a la prochaine version
a par ca, moi j'utilise easyPHP, mais la derniere version (1.6) n'a pas la derniere vesion de mysql... j'ai downloader mysql, mais est ce que je peu le mettre dans et surtout dans quel dossiers est ce que je peu le mettre pour que ca fonctionne ?
Marsh Posté le 30-03-2003 à 01:36:58
euh.... non en fait j'ai telechargé phpmyadmin new version...
mais est ce que je peu updater la version mysql de easaPHP ?
Marsh Posté le 30-03-2003 à 15:24:59
je crois que j'ai reussi
j'ai copier les dossiers de mysql (new version) et phpmyadmin (new version) dans EasyPHP, et ca marche je crois
Marsh Posté le 30-03-2003 à 15:58:07
ben ca marche toujours pas :
Code :
|
je sais pas pourquoi, pourtant j'ai la derniere version mysql...
Marsh Posté le 28-03-2003 à 23:10:09
j'ai fait un ptit compteur, mais il marche pas et il m'affiche pas de message d'erreur...
alors je test avec une requette simple :
mais ca marche pas non+ ! il ne met rien dans ma table ! (j'ai aussi testé avec encore +simple mais rien non+)
je comprend pas... je fait une erreur kek part ? j'ai mal configuré easyPHP ??
merci