Problème dans uen requête mysql

Statut
N'est pas ouverte pour d'autres réponses.
W

writeln

ex membre
salut a tous

jai un probleme avec une requete Mysql



Code:
UPDATE Pack SET DateExp = DATE_ADD(DateExp, INTERVAL 1 MONTH) where PackID = $PackID
voici lerreur retournée
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Jessaie en fait dincrémenté mon champs date de 1 mois

Merci
 

Styleman

Touriste
regarde si tu n'a pas oublié un "; a la fin ou au debut en faisant $sql = "Update...."

sinon where PackID = '$PackID' ça devrais aller
 
1er
OP
W

writeln

ex membre
nonon rien voir, cest bien un problème ds lsql

ma syntaxe pour ADD_DATE est justifiée a cet endroit la? j'ai limpression ki ne veu pas affecter le résultat de add_date à dateexp

Thx
 
writeln a dit:
salut a tous

jai un probleme avec une requete Mysql



Code:
UPDATE Pack SET DateExp = DATE_ADD(DateExp, INTERVAL 1 MONTH) where PackID = $PackID
voici lerreur retournée
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Jessaie en fait dincrémenté mon champs date de 1 mois

Merci
tu ne peux pas référencer un champs dans le SET et dans la modification en même temps. Tu devrais faire d'abord une requête qui récupère la valeur et ensuite, un autre pour l'update. Pour la syntaxe exacte, www.mysql.com si c'est du MYSQL, le site de la base sinon .
 

Jereck

Α & Ω
Staff
Code:
Il faut pas un " ; " à la fin ?
 

SUEd

Touriste
TheFornicator a dit:
tu ne peux pas référencer un champs dans le SET et dans la modification en même temps. Tu devrais faire d'abord une requête qui récupère la valeur et ensuite, un autre pour l'update. Pour la syntaxe exacte, www.mysql.com si c'est du MYSQL, le site de la base sinon .
Faux !!!

Tu peux le faire !:)

exemple fort utilisé (pour incrémenter le nombre de visiteurs d'un topic sur un forum par exemple):
Code:
$sql = "UPDATE table SET NbreVisites=NbreVisites + 1 WHERE TopicID = ".$TopicID;
Pour ta requête, en première vue, je ne vois pas trop le problème :) Ptet dans la syntaxe du DATE_ADD, je n'ai pas vérifié :)
 
tiens, ils ont relâché une contrainte que j'avais avec les premières version Mysql ... lol... enfin, c pas bien de faire comme ça :)
 

Bingo

Beer Addict
TheFornicator a dit:
enfin, c pas bien de faire comme ça :)
Et d'où tu sors que ça n'est pas bien de faire ça ?
C'est comme ça que ça se fait dans tous les DBMS que je connais, et je ne vois vraiment pas le problème.
Si tu veux faire en deux requêtes ce que tu peux faire en une, libre à toi, mais ne va pas dire que ça n'est pas bien.
 
un principe général en BD tout simplement. Normalement, tu ouvres une transaction, tu sélectionne ta valeur, tu vérifie qu'elle soit cohérente, tu la sauve et enfin, tu ferme ta transaction.... Pour moi, ce sont 4 opérations qui devraient être faites systématiquement. mais je t'accorde qu'en travaillant avec mysql (avant la version 4.1 je pense) les transactions n'existant pas...
 

Bingo

Beer Addict
TheFornicator a dit:
un principe général en BD tout simplement. Normalement, tu ouvres une transaction, tu sélectionne ta valeur, tu vérifie qu'elle soit cohérente, tu la sauve et enfin, tu ferme ta transaction....
Certes... Mais les transactions et le SQL, ce sont deux choses différentes. Le SQL ANSI est un langage qui permet tout à fait de faire ce genre de requête d'update. Le fait que ce soit rigoureux où pas dépend de la DB qu'il y à derrière, pas du langage.
(d'accord pour toi avec les transactions sinon, bien-sûr)
 

ZyPh0s

Touriste
TheFornicator a dit:
un principe général en BD tout simplement. Normalement, tu ouvres une transaction, tu sélectionne ta valeur, tu vérifie qu'elle soit cohérente, tu la sauve et enfin, tu ferme ta transaction.... Pour moi, ce sont 4 opérations qui devraient être faites systématiquement. mais je t'accorde qu'en travaillant avec mysql (avant la version 4.1 je pense) les transactions n'existant pas...
J'ai ptetre pas compris ta remarque Fornicator mais la ligne donnée par SUEd
Code:
$sql = "UPDATE table SET NbreVisites=NbreVisites + 1 WHERE TopicID = ".$TopicID;
Est tout a fait correcte et fonctionne avec n'importe quel php. (Et est totalement indépendante de la version de MySQL cela dit au passage) Vu que c'est un concept de base du php. En php 3, ça fonctionnait déjà très bien, c'est juste une concaténation.
 
ZyPh0s a dit:
TheFornicator a dit:
un principe général en BD tout simplement. Normalement, tu ouvres une transaction, tu sélectionne ta valeur, tu vérifie qu'elle soit cohérente, tu la sauve et enfin, tu ferme ta transaction.... Pour moi, ce sont 4 opérations qui devraient être faites systématiquement. mais je t'accorde qu'en travaillant avec mysql (avant la version 4.1 je pense) les transactions n'existant pas...
J'ai ptetre pas compris ta remarque Fornicator mais la ligne donnée par SUEd
Code:
$sql = "UPDATE table SET NbreVisites=NbreVisites + 1 WHERE TopicID = ".$TopicID;
Est tout a fait correcte et fonctionne avec n'importe quel php. (Et est totalement indépendante de la version de MySQL cela dit au passage) Vu que c'est un concept de base du php. En php 3, ça fonctionnait déjà très bien, c'est juste une imbrication.

Alors là, po du tout cher amis..... l'update est passé tel quel au moteur SQL et ne dépend pas de PHP justement. En fonction du moteur SQL, des contraintes et de sa compatibilité avec les normes les plus récentes, ce genre de requête pourrait ou pas passer.... PHP lis juste la requête et la passe telle qu'elle au moteur SQL .
 
Bingo a dit:
TheFornicator a dit:
un principe général en BD tout simplement. Normalement, tu ouvres une transaction, tu sélectionne ta valeur, tu vérifie qu'elle soit cohérente, tu la sauve et enfin, tu ferme ta transaction....
Certes... Mais les transactions et le SQL, ce sont deux choses différentes. Le SQL ANSI est un langage qui permet tout à fait de faire ce genre de requête d'update. Le fait que ce soit rigoureux où pas dépend de la DB qu'il y à derrière, pas du langage.
(d'accord pour toi avec les transactions sinon, bien-sûr)
Le SQL est un langage qui intéroge un BD, je suis d'accord avec toi, mais dans la norme du langage, il est dit: Tout action effectuée sur une base de donnée doit normalement être ACID (Atomique, cohérente, indépendante et durable). Ce pourquoi les transactions on étées ajoutées dans les moteurs de DB. Ainsi, les transactions ne sont pas "définies" dans le langage SQL lui-même, mais plutôt dans les prérequis du moteur SQL qui interprète ce langage. Le problème est que c'est à l'utilisateur d'utiliser ces transactions correctement et cela, parce qu'un ordinateur est incapable de gérer toutes les corélations entre données. L'exemple de la lecture phantôme en est un ! En effet, chaque instruction SQL est en elle-même ACID, mais l'ensemble des requêtes utilisée lors d'une lecture (ou mise à jour) phantome ne peut être apréhendée que par un esprit humain (du moins, pour les requêtes les plus complexes).

Tu as raison dans le sens ou les transactions ne font partie de la NORME ansi du SQL (bien que je devrais aller relire cette norme pour être sure), mais c'est un mécanisme qui devrait être beaucoup plus utilisé de manière générale car plus sécuritaire.
 

ZyPh0s

Touriste
:shock:
On doit mal se comprendre parce ce que là, la ligne est directement interpretée par le PHP puis transformée en une chaine correcte pour la requete SQL.

genre:
Code:
$b="joli mome";
$a="Wazaaa ".$b." ici";
on aura bien $a= "Wazaaa joli mome ici"
Les premieres lignes de codes dans le thread sont totalement fausses là je suis d'accord, mais celle que j'ai précitée tantôt est parfaitement correcte.
 
pour ce qui est de l'intervention de PHP dans le code SQL. Soyons clair.

Si l'on tape:
Code:
$sql = 'select * from test';
Cela sera accepté par le moteur PHP ET SQL.... et même, PHP ne regardera même pas le contenu de la chaîne entre ', il la prend et la passe au moteur SQL.

ainsi, si l'on tape
Code:
$sql = 'select * from $table';
la chaîne qui sera passée au moteur SQL sera : Select * from $table (oui oui $table). PHP n'évalue pas une string entre simple ' lors de l'affectation de variable.

Par contre, si l'on place un ", alors là, il en va tout autrement. En effet, PHP va alors évaluer la chaîne avant de la passer au moteur SQL (cette évaluation à des limites...)

ainsi :
Code:
$table = test;
$sql = "select * from $table";
est tout à fait correcte et donnera le même résultat que

Code:
$table = test;
$sql = "select * from ".$table."";
c'est à dire que la chaîne envoyée au moteur sera : select * from test

il faut cependant savoir que si l'on joue avec un tableau, l'évaluation d'une chaîne ce limite à la première dimension, il faut alors, et ce obligatoirement, passer par un ".$tableau[0][1]." pour que cela soit correct, sinon, on retrouvre une chaîne genre $array[1] en plein milieu de la requête.

voilà voilà .....
 

ZyPh0s

Touriste
Oki c'est bon on était d'accord ;)
Mais bon j'aime pas trop cette syntaxe :
TheFornicator a dit:
Code:
$table = test;
$sql = "select * from $table";
On peut facilement faire des erreurs en utilisant cette méthode je trouve ;) (c'est un goût personnel)
 
ça peut être utilise quand tu veux faire varier $table pour éviter de créer certains liens dans ta BD... mais je te l'accorde, le mieux, c'est de jouer avec des relations inter table que de créer des tables et de jouer avec les noms...
 

ZyPh0s

Touriste
Je parlais de la syntaxe ;) (je prefere un "".$a."" que " a$ ")
Pour les multi table ca me dérange pas j'ai déjà fait un p'tit projet très sympathique utilisant des requetes assez complexes ;) (pour les currieux c'était pour gérer des listes de DivX de différentes qualitée, taille, etc, entre beaucoup de personne, et a chaque fois avoir la meilleure version visible dans la liste principale, afin de ne propager que cette version, le tout avec visualisation en différente couleur selon la qualitée ;)

Cela va de soi que c'était que des rip de la cassettes vidéo de ma grand mère à la plage.
 
O

objectifweb

ex membre
Bonjour,

merci à tous les pros de faire leur commentaire mais qui a la réponse à la question demandée ?

j'ai le même cas et le même problème.. sauf que je veux ajouter quelques jours dans mon champs

Amicalement
Patrick
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut