Page 1 sur 1

problème de syntaxe sql

Posté : 21 janv. 2007, 15:43
par HD
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 !

Posté : 21 janv. 2007, 16:01
par zeus
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:

Posté : 21 janv. 2007, 16:02
par Truc
Salut,

La faute aux majuscules ? :-k
MYSQL_QUERY()

Posté : 21 janv. 2007, 16:24
par sadeq
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.

Posté : 21 janv. 2007, 16:48
par zaknaou
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...

Posté : 21 janv. 2007, 19:01
par HD
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)

Posté : 21 janv. 2007, 20:21
par HD
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);
:?:

Posté : 21 janv. 2007, 20:49
par Truc
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

Posté : 22 janv. 2007, 14:06
par HD
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)

Posté : 22 janv. 2007, 14:19
par Ajoloca
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.

Posté : 22 janv. 2007, 14:29
par HD
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...

Posté : 22 janv. 2007, 14:53
par Ajoloca
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.

Posté : 22 janv. 2007, 14:59
par HD
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

Posté : 22 janv. 2007, 15:04
par zeus
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