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 :

Erreur SQL state 07001 avec requete WHERE [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut Erreur SQL state 07001 avec requete WHERE
    Bonjour à tous,

    Je débute complètement dans la diffusion de ma base Access sur le Web.

    Aprés de longue heures de recherche je butte sur une erreur dont je n'arrive pas à comprendre la cause.

    Je vous expose mon code PHP qui dépend d'un autre fichier php dans lequel l'utilisateur entre l'ID recherché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?php
    $base="BaseOuvrage_v1.0";
    $user="";
    $pass="";
    $cnx=odbc_connect($base,$user,$pass);
    if( ! $cnx ) echo "Impossible de ce connecter";
    ?>
    <?php
    if ($_POST["RechID"]=="")
    {
    	$Recherche="TdB_Caractéristique.Id_R";
    }
    else
    {
    	$Recherche=$_POST["RechID"];
    }
    $Req = odbc_do($cnx,'SELECT TdB_Caractéristique.Id_R, 
    TdB_Caractéristique.Nom_ouvrage, TdB_Caractéristique.Région, 
    TdB_Caractéristique.Département, TdB_Caractéristique.Commune, 
    TdB_Caractéristique.Propriétaire FROM TdB_Caractéristique 
    WHERE TdB_Caractéristique.Id_R like"'.$Recherche.'"');
    while($data=odbc_fetch_array($Req))
    {
    echo '<b>'.$data['Id_R'].' </b>| '.$data['Nom_ouvrage'].'</br>';
    }
    echo $Recherche
    ?>
    Lorsqu'on ne met rien dans la zone de texte de recherche tout ce passe bien, il m'affiche tous les enregistrements, mais lorsque l'on defini un ID, le code plante avec l'erreur SQL:
    Trop peu de paramètres. 1 attendu., SQL state 07001 etc
    à la ligne 21 qui correspond à la ligne de la commande WHERE.

    N.B.: la dernière ligne avec echo me permettait de voir si ma condition marchait bien.

    une idée ? Merci à vous

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    ton guillemet est collé à ton LIKE

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Effectivement j'ai mis un espace mais ça ne résout pas le problème.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    J'ai pris le problème à l'envers.
    Au début je passais par MySQL,
    En utilisant la même méthode avec la fonction msql_query puis mysql_fetch_assoc ça marche impeccable.

    Je pense donc que le problème viens de la fonction odbc_do().

    Comme je souhaitais avoir une condition dans ma requête pour effectuer une recherche, j'ai aussi essayer odbc_prepare() et odbc_execute() mais sans succès.

    Donc voila une alternative a odbc_do() est peut-être une piste que je m’apprête à suivre.
    Qu'en pensez-vous ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Bon et bien ça y est j'ai trouvé!!
    Le probléme ne vient pas de la fonction odbc_do().

    Il s'avére simplement que dans la fonction WHERE dans le code SQL qu'un critére doit être entouré de guillemets lorsqu'il s'agit d'une valeur fixe et NE DOIT PAS être entouré de guillemets lorsqu'il s'agit d'un champs par exemple.

    Dans le cas présent:
    WHERE TdB_Caractéristique.Id_R="XXXXX" pour afficher uniquement cet enregistrement ou
    WHERE TdB_Caractéristique.Id_R=TdB_Caractéristique.Id_R pour afficher tous les enregistrements si la personne n'écrit rien dans la zone de recherche.

    J'ai donc adapter le code fixant la valeur de la variable $Recherche pour qu'elle intégre les guillemets lorsque la personne a rentré une recherche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ($_POST["RechID"]=="")
    {
    	$Recherche="TdB_Caractéristique.Id_R";
    }
    else
    {
    	$Recherche='"'.$_POST["RechID"].'"'; 
    }
    J'espére que cela vous viendra en aide si besoin, c'est pour cela que je me permet de développer la réponse. Bonne journée à vous et merci comme même à Madfrix

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Bon je ne comprends pas ça ne marche plus

    Dés que j'enléve la partie avec WHERE ça marche, mais dés que je rajoute une condition ça foire.
    Que je la mette fixe, propre avec des guillemets ou en variable ça foire tout le temps.
    Il n’accepte que "TdB_Caractéristique.Id_R=TdB_Caractéristique.Id_R" ... super.

    J'ai toujours cette erreur : 07001, trop peu de paramétre !!!!

    Je me suis dis c'est parce que j'ai bidouillé et bien non !!! même en reprenant le code que je vous ai donné ça bug!


    tout ce que je veux faire c'est une requete SQL avec un WHERE pour trier ppllzzzz HEEEELP

  7. #7
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    avant l'execution de ta requete, place ta requete dans une variable et fais un echo, peut être que tu verras l'erreur.
    Sinon affiche nous le résultat de cet echo

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Merci

    Je ne sais pas si j'ai bien compris ta demande:
    - J'ai placé ma requete comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Test = 'SELECT TdB_Caractéristique.Id_R, TdB_Caractéristique.Région FROM TdB_Caractéristique WHERE TdB_Caractéristique.Id_R LIKE "IT0120"'
    Après un echo, il me réécrit la requête à l'identique sans les '

    Je ne sais pas si c'est ce que tu m'a demandé.
    Après je vais faire la même chose avec $Test = odbc_do($cnx, 'SELECT .....
    pour anticiper mon incompréhension (si elle est avérée ^^)

  9. #9
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    les noms de tables/champs ne doivent pas avoir d'accents

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Ok je look ça, merci

    EDIT : ça ne change rien au problème :s

  11. #11
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    tu as corrigé toute ta base et ton scprit ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Oui,
    de toute manière il arrive a afficher le résultat de la requête lorsqu'il n'y a pas de fonction WHERE (et lorsque dans le critère est égale au nom du champs), ça aurait foiré tout le temps si c'était un problème d'accent non ?

  13. #13
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    la requête précédente que tu nous as montré semble valide.

    Peux tu nous remontrer l'état de ton code actuel ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Voici la requête actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    $base="BaseOuvrage_v1.0";
    $user="";
    $pass="";
    $cnx=odbc_connect($base,$user,$pass);
    if( ! $cnx ) echo "Impossible de ce connecter";
    ?>
    <?php
     
    if ($_POST["RechID"]=="")
    {
    	$Recherche="TdB_Caracteristique.Id_R";
    }
    else
    {
    	$Recherche='"'.$_POST["RechID"].'"';
    }
    $Test = 'SELECT TdB_Caracteristique.Id_R, 
    TdB_Caracteristique.Nom_ouvrage FROM TdB_Caracteristique 
    WHERE TdB_Caracteristique.Id_R LIKE '.$Recherche.'';
    $Req = odbc_do($cnx, $Test);
    while($data=odbc_fetch_array($Req))
    {
    echo '<b>'.$data['Id_R'].' </b>| '.$data['Nom_ouvrage'].'</br>';
    }
    echo $Recherche;
    echo $Req;
    ?>
    Ce que je ne comprend pas non plus c'est que ça a marché un temps puis quand j'ai rebidouillé ça n'a plus marché. Mais quel était le caractére magique qui a tout réparé ?!

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    N.B: j'avais commencé à mettre ma base sur MySQL et que le même script avec mysql_query etc marche.

  16. #16
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Essaies ca :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if ($_POST["RechID"]=="")
    {
    	$Recherche="TdB_Caracteristique.Id_R";
    }
    else
    {
    	$Recherche = $_POST["RechID"];
    }
    $Test = 'SELECT TdB_Caracteristique.Id_R, 
    TdB_Caracteristique.Nom_ouvrage FROM TdB_Caracteristique 
    WHERE TdB_Caracteristique.Id_R LIKE "'.$Recherche.'"';

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    idem

  18. #18
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Essaies cela alors :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $statement = odbc_prepare($cnx, 'SELECT TdB_Caracteristique.Id_R, 
    TdB_Caracteristique.Nom_ouvrage FROM TdB_Caracteristique 
    WHERE TdB_Caracteristique.Id_R LIKE "?"');
    $resultat = odbc_execute($statement , array($Recherche));

    EDIT: pourquoi ne pas utiliser PDO ? Contrainte ?

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Je test
    Parce que je ne connais pas PDO, mais je n'ai pas de contrainte particuliére.
    Je pourrais utiliser ma base access avec cet outil ?

  20. #20
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    C'est l'intérêt de PDO : tu n'es pas lié à un type de base particulier

    EDIT: sauf que pour access, cela nécessite un driver donc restes avec odbc

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Pb de requete SQL avec clauses WHERE dans une procédure stockée
    Par CocoLeNain dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/06/2010, 23h48
  2. update qui ne fonctionne pas ! SQL state 07001 ...
    Par Titiii25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/11/2009, 13h16
  3. Réponses: 3
    Dernier message: 18/09/2006, 20h55
  4. [SQL Server] Problèmes avec un WHERE
    Par Epervier dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/06/2006, 21h21

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