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 PDO qui plante [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Points : 151
    Points
    151
    Par défaut Requete PDO qui plante
    Bonsoir,

    Je galere pour modifier mes requetes mysql_query en pdo qui fonctionnaient tres bien avant.... donc je vient chercher un peu d'aide sur le forum.

    J'ai une requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sqlpdo=$connexion->query("SELECT * FROM emplacement
    WHERE valeur_id=".$_GET['modifier']."");
    $data_inf_emp = $sqlpdo->fetch(PDO::FETCH_OBJ);
    $sqlpdo->closeCursor();
    qui fonctionne bien, mais si je la fait sur une colonne vide de la bd ça plante...

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sqlpdo=$connexion->query("SELECT * FROM emplacement
    WHERE nom=".$le_nom."");
    $data_inf_emp = $sqlpdo->fetch(PDO::FETCH_OBJ);
    $sqlpdo->closeCursor();
    La variable $le_nom est bien transmise depuis le formulaire, la colonne nom existe dans la bd, mais si elle est vide ça plante...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo $data_inf_emp->nom;
    Message d'erreur :

    Notice: Trying to get property of non-object in C:\xampp\htdocs\data-pdo\etc..
    Je pense que c'est parce que la colonne "nom" est vide, mais il existe pas un moyen de gerer ça ?

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sqlpdo=$connexion->query("SELECT * FROM emplacement
    WHERE prenom= ".$_GET['modifier']." OR nom=".$le_nom."");
    $data_inf_emp = $sqlpdo->fetch(PDO::FETCH_OBJ);
    $sqlpdo->closeCursor();
    Seulement comme $_GET['modifier'] est toujours egale à "prenom" le code ne tient plus compte de ce qui vient apres le OR...

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir, pourquoi ne pas écrire dans la norme
    1) un contrôle du GET
    2) un prepare

    Et bien sur a la connexion tu as mis en place la gestion d'erreurs
    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
     
    <?php
    $laid = (isset($_GET['modifier'])) ? $_GET['modifier'] : '';
     try
          {
           $connexion = new PDO('mysql:host=localhost;dbname=TADB', 'root', '');
           $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          }
        catch(Exception $e)
         {
          die('Erreur : '.$e->getMessage());
         }
    //===ensuite==============
      $sqlpdo=$connexion->prepare("SELECT * FROM emplacement WHERE valeur_id = :LaLid ");
      $sqlpdo->execute(array(':LaLid' => $laid));
    while ($donnees = $sqlpdo->fetch())
    {
    	echo "<li>".$donnees['valeur_id']." (".$donnees['autre'].")</li>";
    }
     
    $sqlpdo->closeCursor();
    ?>

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Points : 151
    Points
    151
    Par défaut
    Bonjour,

    Merci pour ta réponse, mais ça ne fonctionne pas mieux.

    Je remet le code complet avec ta modif :
    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
     
    //code de connexion dans le fichier appelé par include('conf_pdo.php')
    $hote='***';
    $port='****';
    $nom_bd='****';
    $utilisateur='****';
    $mot_passe='****';
     
    try
    {
    /*$connexion = new PDO('mysql:host='.$hote.';port='.$port.';dbname='.$nom_bd, $utilisateur, $mot_passe);
    */
    $connexion = new PDO('mysql:host='.$hote.';port='.$port.';dbname='.$nom_bd, $utilisateur, $mot_passe, array(
        PDO::ATTR_PERSISTENT => true
    ));
    }
    catch(Exception $e)
    { echo 'Erreur : '.$e->getMessage().'<br />';echo 'N° : '.$e->getCode();}
     
    $laid = (isset($_GET['modifier'])) ? $_GET['modifier'] : '';
      $sqlpdo=$connexion->prepare("SELECT * FROM emplacement WHERE valeur_id = :LaLid ");
      $sqlpdo->execute(array(':LaLid' => $laid));
    while ($data_inf_emp = $sqlpdo->fetch())
    {
    	echo "<li>".$data_inf_emp['valeur_id']." (".$data_inf_emp['prenom'].")</li>";
    }
     
    $sqlpdo->closeCursor();
    Par contre si $_GET['modifier'] est egal a kke chose,le code plante maintenant et j'ai la mm erreur. Alors que avec le code d'origine ça fonctionne avec le $_GET.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Points : 151
    Points
    151
    Par défaut
    Bon j'ai modifier comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete_prepare_1=$connexion->prepare("SELECT * FROM emplacement WHERE valeur_id = :id");
    $requete_prepare_1->execute(array( 'id' => $_GET['modifier']));
    $data_inf_emp=$requete_prepare_1->fetch(PDO::FETCH_OBJ);
    Et la ça fonctionne, mais tjrs le mm pb si la colonne dans la requete est vide...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Désolée, le code que je te mets est un exemple !! c'était à toi de l'adapter
    par contre tu continues a utiliser sans passer par une variable le $_GET

    Par ailleur tu doit si tu utilises le type de reception du $_GET que je t'ais indiquée, en mettant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    if ($laid!="") {
    //============ alors on ajoute
    }
    ?>
    Pour le reste je l'ais testé mon code marche bien entendu !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Points : 151
    Points
    151
    Par défaut
    Bonsoir,

    Pourquoi ça change quoi de faire :
    $ma_variable = $_GET['modifier']; à la place du $_GET directement ? Ca alourdis le code pour rien ? non.

    Cordialement.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    En premier tu peux enrichir cela en auscultant ta variable ...
    D'autre part tu vois bien que je peux très facilement ne faire ma requête que si la variable est non vide !
    Mais nous sommes ici pour aider, et répondre aux question... après chacun fait son choix.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Points : 151
    Points
    151
    Par défaut
    Bonjour,

    Ok je prends bonne note de tes conseils que je vais appliquer. Merci encore pour ton aide.

    Cordialement.

    Roland.

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

Discussions similaires

  1. requete sql qui plante
    Par sasuke18 dans le forum Débuter
    Réponses: 2
    Dernier message: 21/12/2010, 13h16
  2. Identifier une requete SQL qui plante
    Par yanis97 dans le forum Oracle
    Réponses: 6
    Dernier message: 19/03/2010, 09h24
  3. Réponses: 3
    Dernier message: 29/04/2009, 14h14
  4. Requete de stat qui plante quand rien pour un mois
    Par Christophe P. dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/02/2007, 18h35

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