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 :

PDO MySQL INSERT INTO rien ne s'insere. [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut PDO MySQL INSERT INTO rien ne s'insere.
    Bonjour,

    Je cherche à faire une fonction pour inserer des données de session dans ma base de données.
    Je n est aucune PDOException donc ma fonction retourne bien $r == true.
    quand je verifie sur phpmyadmin je ne trouve rien.

    Merci de votre aide vos remarques ou de vos pistes :

    Connexion au début du fichier function_session.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /** **/
    $PARAM_hote='localhost'; // le chemin vers le serveur
    $PARAM_port='3306';
    $PARAM_nom_bd='xxxxxx'; // le nom de votre base de données
    $PARAM_utilisateur='xxxxxx'; // nom d'utilisateur
    $PARAM_mot_passe='xxxxxx'; // mot de passe de l'utilisateur 
     
    try {
        $dbh = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
    } catch (PDOException $e) {
        echo 'Error connecting to MySQL ! : '.$e->getMessage();
    }
    La fonction en cause :
    se trouve dans le fichier function_session.php
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Function openSession($userid) {
     
        global $dbh;
     
        // Re-génération du sid
        session_regenerate_id();
     
        // insert une ligne
        $sid = session_id();
        $ip = getip();
        $browser = getbrowser();
        $os = getos();
        $today = date('Y-m-d H:i:s');
     
        // On insère le nouvel id de session dans la db
        try {
            $stmt = $dbh->prepare("INSERT INTO med_session (idsess, sid, idmuser, IP, browser, os, date_s)
                                    VALUES ('',:sid, :iduser, :ip, :browser, :os, :date_s)");
            $stmt->bindParam(':sid', $sid, PDO::PARAM_STR, 50);
            $stmt->bindParam(':iduser', $userid, PDO::PARAM_INT);
            $stmt->bindParam(':ip', $ip, PDO::PARAM_STR, 15);
            $stmt->bindParam(':browser', $browser, PDO::PARAM_STR, 50);
            $stmt->bindParam(':os', $os, PDO::PARAM_STR, 50);
            $stmt->bindParam(':date_s', $today,PDO::PARAM_STR, 17);
     
            $stmt->execute();
     
            $r = true;
            //$stmt = null;
        }
        catch (PDOException $e) {
            echo 'Erreur insert into session : '.$e->getMessage();
            $stmt->rollBack();
            $r = false;
        }
     
        // POUR LE DEBUG ***
        $tab['session'] = $sid;
        $tab['iduser'] = $userid;
        $tab['ip'] = $ip;
        $tab['browser'] = $browser;
        $tab['os'] = $os;
        $tab['date'] = $today;
     
        print("<pre>");
        print_r($tab);
        print("</pre>");
     
        return $r;
    }
    Resultat de l'affichage de $tab dans index :
    Array
    (
    [session] => 8jkdk8oed92ktkmkknh7omi8m2
    [iduser] => 1
    [ip] => 127.0.0.1
    [browser] => Firefox
    [os] => Windows
    [date] => 2009-12-16 16:18:24
    )
    Page index reduit au stricte minimum pour tester cette fonction je lui fournie un id_user valide = 1 :
    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
     
    session_start();
    include_once("./function_session.php");
     
    // On initialise la session avec le userid récupérer
    $loginCheck = 1;
    echo 'logincheck ID user : <b>'.$loginCheck.'</b> <br>';
    if( !openSession($loginCheck) ) {
          echo '<br>Resultat de openSession : false !! <br>';
    } else {
         $infouser = getUserInfo();
     
          if (empty($infouser)) {
                 echo 'erreur';
          }
     
          echo $infouser['idmuser'].' '.$infouser['username'].' <br>';
    }

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    PDO, par défaut, ne lève pas d'exception ni ne génère d'erreur : il est en mode "silencieux" (PDO::ERRMODE_SILENT). Il faut donc modifier ce comportement par PDO::setAttribute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    alors merci à vous deux c'est beaucoup plus simple comme cela ! ;-)

    Merci encore!

  4. #4
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Ce que tu proposes est utile mais parfois difficile à interpréter :

    cas d'une erreur dans la dénomination de la table pour une requête SELECT j'obtiens :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1 near "WHERE": syntax error' in...
    En clair, il y a un truc qui cloche pas loin de WHERE. Good luck for debugging !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    oui je suis un peux d'accord sur ce point.

    J'ai retirer le "résolu" pour prolonger légèrement la discussion.

    Comment peut on en plus de l exception récupérer la requête passée à mysql ?

    Chose qui était très facile avec une connexion classique à mysql.

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

Discussions similaires

  1. [MySQL] PHP/MySQL INSERT INTO en masse qui déraille (oubli de données)
    Par yahoowaloo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/07/2009, 17h19
  2. [INSERT INTO] Rien dans ma base !
    Par dekovince dans le forum Débuter
    Réponses: 7
    Dernier message: 21/03/2007, 17h37
  3. [MySQL] insert or rien
    Par manshoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/06/2006, 15h47
  4. [SGBD] [MySQL] Insert Into
    Par Pigoulou dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/01/2006, 07h34
  5. [MySQL] insert into complexe ....
    Par roninou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/08/2005, 19h10

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