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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    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.

+ 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