Problème dans uen requête mysql

Discussion dans 'Web, design' créé par writeln, 3 Avril 2004.

Statut de la discussion:
Fermée.
  1. Offline
    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

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

    Merci
    writeln, 3 Avril 2004
    #1
  2. Offline
    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
    Styleman, 3 Avril 2004
    #2
  3. Offline
    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, 3 Avril 2004
    #3
  4. Offline
    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 .
    TheFornicator, 13 Avril 2004
    #4
  5. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Code:
    Il faut pas un " ; " à la fin ?
    Jereck, 13 Avril 2004
    #5
  6. Offline
    SUEd Touriste
    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é :)
    SUEd, 13 Avril 2004
    #6
  7. Offline
    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 :)
    TheFornicator, 13 Avril 2004
    #7
  8. Offline
    Bingo Beer Addict
    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.
    Bingo, 14 Avril 2004
    #8
  9. Offline
    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...
    TheFornicator, 14 Avril 2004
    #9
  10. Offline
    Bingo Beer Addict
    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)
    Bingo, 14 Avril 2004
    #10
  11. Offline
    ZyPh0s Touriste
    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, 16 Avril 2004
    #11
  12. Offline

    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 .
    TheFornicator, 16 Avril 2004
    #12
  13. Offline
    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.
    TheFornicator, 16 Avril 2004
    #13
  14. Offline
    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.
    ZyPh0s, 16 Avril 2004
    #14
  15. Offline
    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à .....
    TheFornicator, 16 Avril 2004
    #15
  16. Offline
    ZyPh0s Touriste
    Oki c'est bon on était d'accord ;)
    Mais bon j'aime pas trop cette syntaxe :
    On peut facilement faire des erreurs en utilisant cette méthode je trouve ;) (c'est un goût personnel)
    ZyPh0s, 16 Avril 2004
    #16
  17. Offline
    ç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...
    TheFornicator, 16 Avril 2004
    #17
  18. Offline
    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.
    ZyPh0s, 16 Avril 2004
    #18
  19. Offline
    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
    objectifweb, 26 Avril 2005
    #19
Statut de la discussion:
Fermée.