problème de syntaxe sql

HD
Mammouth du PHP | 1181 Messages

21 janv. 2007, 15:43

bonjour
j'ai le script suivant qui vide une table "data" :
			$query = "SELECT artid FROM data"; 
			$resreqq = mysql_query($query) or die(mysql_error());
					
					while($dataresqq = mysql_fetch_assoc($resreqq))
					{
						$ref= $dataresqq['artid'];
						$delete= "DELETE FROM data WHERE artid = $ref";
						$result= MYSQL_QUERY($delete);
					
						if(mysql_error())
								{
								print "Erreur dans la base de données : ".mysql_error()." Reference : ".$dataresqq['reference']."<br>" ;
								}
ca marche parfaitement en local (easyphp 1.8) le problème c'est que une fois chargé sur le serveur ca met :
Erreur dans la base de données : You have an error in your SQL syntax near '' at line 1 Reference :
et si je met
"DELETE * FROM data WHERE artid = $ref";
erreur :
Erreur dans la base de données : You have an error in your SQL syntax near '* FROM data WHERE artid = ' at line 1 Reference :
:?
merci pour votre aide !
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 janv. 2007, 16:01

Plusieurs réponses :
- Pourquoi pas un DELETE FROM data direct ? :-k
- DELETE * n'a aucun sens. Soit tu supprimes tout la ligne, soit rien ;)
- MYSQL_QUERY en majuscule, je ne suis pas sûr que ça passe partout. Je suis même d'ailleurs franchement étonné que ça passe sous Win32 :shock:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 janv. 2007, 16:02

Salut,

La faute aux majuscules ? :-k
MYSQL_QUERY()

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 janv. 2007, 16:24

Il faut savoir que "DELETE From data" suffit dans ton cas puisque tu veux supprimer tous les articles.
Je ne vois pas pourquoi tu sélectionnes les artid pour les supprimer un par un dans la même table data ???

Cest effectivement un problème logique.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 88 Messages

21 janv. 2007, 16:48

Ou pour supprimer la valeur d'un seul champ utilise update non ?

UPDATE ... SET ... par $x

x serai une variable vide :

x = "";

Par exemple (je n'est lu que ta question donc si quelqun à répondre quelque chose de semblable tant mieu...
Cordialement zaknaou

HD
Mammouth du PHP | 1181 Messages

21 janv. 2007, 19:01

j ai remplacé les majuscules et ça ne marche toujours pas :?
Je ne vois pas pourquoi tu sélectionnes les artid pour les supprimer un par un dans la même table data ???
je préfére laisser ça car je vais modifier la requete plus tard pour supprimer ces artid d'une autre table (sans toucher le reste du contenu de cette nouvelle table)
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

HD
Mammouth du PHP | 1181 Messages

21 janv. 2007, 20:21

j'ai vérifié les versions de mysql :
sur easyphp c'est MySQL 4.1.9
sur le serveur c'est MySQL 3.23.58
peut etre que mysql 3 ne supporte pas
$delete= "DELETE FROM data WHERE artid = $ref";
$result= mysql_query($delete);
:?:
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 janv. 2007, 20:49

une requete de ce type devrait être supportée par toutes les versions (en place)

commence par afficher la requête.
exécute directement dans passer par PHP
je préfére laisser ça car je vais modifier la requete plus tard pour supprimer ces artid d'une autre table (sans toucher le reste du contenu de cette nouvelle table)
no compri :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

HD
Mammouth du PHP | 1181 Messages

22 janv. 2007, 14:06

une requete de ce type devrait être supportée par toutes les versions (en place)

commence par afficher la requête.
exécute directement dans passer par PHP
les requetes affichées semblent correctes :
query : SELECT artid FROM data
delete : DELETE FROM data WHERE artid = 191
je préfére laisser ça car je vais modifier la requete plus tard pour supprimer ces artid d'une autre table (sans toucher le reste du contenu de cette nouvelle table)
no compri :-k
maintenant je travaille effectivement sur la même table, mais après ce même code va utiliser une autre table (donc j aurai 2 tables à la fin)
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

ViPHP
ViPHP | 1961 Messages

22 janv. 2007, 14:19

Bonjour,
Plusieurs réponses :
- Pourquoi pas un DELETE FROM data direct ? :-k
- DELETE * n'a aucun sens. Soit tu supprimes tout la ligne, soit rien ;)
- MYSQL_QUERY en majuscule, je ne suis pas sûr que ça passe partout. Je suis même d'ailleurs franchement étonné que ça passe sous Win32 :shock:
<que pour info>
MySQL pour une raison de compatibilité avec Access accepte une syntaxe proche

Code : Tout sélectionner

DELETE FROM table.* .....
</que pour info>

Ne l'utilisez pas sauf si vous devez utiliser les deux systèmes.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

HD
Mammouth du PHP | 1181 Messages

22 janv. 2007, 14:29

Plusieurs réponses :
- Pourquoi pas un DELETE FROM data direct ? :-k
et je peux faire quoi sinon ??
Plusieurs réponses :
- DELETE * n'a aucun sens. Soit tu supprimes tout la ligne, soit rien ;)
j'ai enlevé le *

- MYSQL_QUERY en majuscule, je ne suis pas sûr que ça passe partout. Je suis même d'ailleurs franchement étonné que ça passe sous Win32 :shock:
j ai enlevé les majuscules

et ça bug toujours...
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

ViPHP
ViPHP | 1961 Messages

22 janv. 2007, 14:53

Re,

Je fais comme les autres, je ne comprends pas bien ce que tu cherches à faire.

Pour supprimer toutes les données d'une table sans supprimer la structure

Code : Tout sélectionner

TRUNCATE nom_table;
tout simplement!
Si c'est pas ça explique plus clairement de quoi tu pars et quel est le but à atteindre.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

HD
Mammouth du PHP | 1181 Messages

22 janv. 2007, 14:59

je crois que vous ne me suivez pas à cause de la table data donc je modifie mon code :
$query = "SELECT artid FROM data2"; 
            $resreqq = mysql_query($query) or die(mysql_error());
                    
                    while($dataresqq = mysql_fetch_assoc($resreqq))
                    {
                        $ref= $dataresqq['artid'];
                        $delete= "DELETE FROM data WHERE artid = $ref";
                        $result= MYSQL_QUERY($delete);
                    
                        if(mysql_error())
                                {
                                print "Erreur dans la base de données : ".mysql_error()." Reference : ".$dataresqq['reference']."<br>" ;
                                } 
donc :
on récupère des "artid" de la table "data2"
pour chaque "artid" supprimer les "artid" correspondants de la table "data"
problème : message d'erreur
Erreur dans la base de données : You have an error in your SQL syntax near '' at line 1 Reference :
merci
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 janv. 2007, 15:04

A partir de ce que tout nous dit, ton système est prévu, à terme, pour supprimer les données dans une table à partir des données d'une autre, c'est ça ?

Alors,
si tes tables sont identiques, pourquoi ne pas faire un

Code : Tout sélectionner

DELETE FROM table
ou un

Code : Tout sélectionner

TRUNCATE table
qui te permettrait de vider une table entièrement d'un seul coup ?
Pourquoi ne pas vider directement la seconde table en fait ? :-k
De même, pourquoi avoir 2 tables identiques ? (toujours dans l'hypothèse de 2 tables identiques)

si tes tables sont différentes, ta structure avec 2 requêtes prend de son sens, il nous faut donc la corriger

Pour corriger ton delete, est-ce que tu as essayé d'afficher $delete ?
D'après le second message d'erreur, il est possible que le $ref ne soit pas pris en compte, ce qui expliquerais le 1er message d'erreur vide.
En effet, MySQL retourne toujours le code SQL qui suit l'erreur. Comme ce code SQL est vide dans ta 1ere requête, j'en déduit donc que c'est la fin de la requête, dont le $ref, qui gène ;)

Toute cette tartine est là pour te donner la réflexion que j'ai suivie pour te venir en aide. Prend en de la graine pour tes prochain soucis :D
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer