IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requete sql qui ne passe pas [Oracle]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut Requete sql qui ne passe pas
    Bonjour,

    Voila j'ai un probleme avec une requete

    en fait j'ai un formulaire avec un champ nom, description et position, et une fosi que j'envoie le formulaire j'ai une requete qui doit créer un nouvel enregistrement dans la bdd

    Le problème est lorsque je met une guillemet " dans un des champs texte.

    Je déclate ma requete dans une variable pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = 'insert into ma_table values (\''.$nom.'\', \''.$desc.'\', '.$pos.')';
    ensuite je parse la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $stmt = oci_parse($connect, $requete) or die ("erreur à la création");
    puis j'execute la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oci_execute($stmt, OCI_DEFAULT) or die ("erreur a l'execution");
    Seulement si je met une guillemet dans un champ la requete plante a l'execution et aucune erreur n'est retournée lorsque je remplace le texte "erreur a l'execution" par la fonction oci_error() qui retourne la dernière erreur oracle (qui serait donc l'erreur due a la requete si elle était mauvaise). Or si elle ne retourne rien c'est qu'il n'y a pas d'erreur.

    En effet lorsque j'affiche la requete et que lje la copie dans la console oracle, l'enregistrement est créé. Par contre en le créant vianla console oracle, la ligne n'apparait pas ensuite dans le naviguateur lorsque j'affiche via php la liste des enregistrements de la table ...

    Help please

    Merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Citation Envoyé par Sh4dow49 Voir le message
    En effet lorsque j'affiche la requete et que lje la copie dans la console oracle, l'enregistrement est créé. Par contre en le créant vianla console oracle, la ligne n'apparait pas ensuite dans le naviguateur lorsque j'affiche via php la liste des enregistrements de la table ...
    Effectues-tu bien le commit en PHP ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    oui je l'effectue juste avant la déconnexion

    Voici le script deconnexion.php qui est include dans chaque page dès qu'il y a eu connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    	oci_commit($connect) or die ("Erreur lors de la validation de la requ&ecirc;te ...");
    	oci_close($connect) or die ("Erreur lors de la d&eacute;connexion de la base de donn&eacute;es ...");
    	oci_free_statement($stmt);
    ?>

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Par défaut
    Pour ton problème de côte, ton PHP est paramétré avec les magic quotes ou pas ? Si c'est pas le cas il faut que tu ajoutes des addslashes.

    par contre c'est bizarre que la fonction oci_error ne te renvoie rien...

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Citation Envoyé par rapha51 Voir le message
    par contre c'est bizarre que la fonction oci_error ne te renvoie rien...
    C'est pour ça que j'ai posé la question du commit.

    Effectivement peut-être avec addslashes...

    De toute façon, il vaudrait mieux utiliser des requêtes préparées

    http://g-rossolini.developpez.com/tu.../?page=donnees

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::11_QUESTION_ID:35816267380038

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::11_QUESTION_ID:1993620575194

    http://http://chrisgatesconsulting.com/preparedStatements.ppt#281,26,Soft Parse Isn't Enough

    Pour résumer : le système de cache de requêtes d'Oracle ne fonctionne bien que lorsque 99% des requêtes sont des requêtes préparées !

    HTH

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    J'ai testé le addslashes et voila ce qui s'est passé :

    j'ai testé avant et après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_replace("'", "''", $chain);
    mais il ne met un antislash que devant les quotes, et non devant la guillemet, or la quote s'échappe sous oracle en la doublant (d'ou le str_replace) mais la guillemet n'a pas besoin d'être échappée sous oracle. de plus la fonction addslashes n'a pas ajouté d'anti slash devant.

    Je vais me pencher sur les requetes préparées pour voir si ca change quelque chose ou pas ... (si quelqu'un a autre chose à proposer en attendant je suis preneur de toutes les solutions)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] requete sql qui ne fonctionne pas
    Par Ladslman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/01/2009, 14h09
  2. [Access] requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2007, 12h33
  3. requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/03/2007, 09h37
  4. [MySQL] requete sql qui ne donne pas le bon array
    Par easyjava dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 02/11/2006, 14h41
  5. [hibernate]requete SQL qui ne passe pas
    Par Gromitou dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/06/2006, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo