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 insert et update ne marche pas [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 124
    Points
    124
    Billets dans le blog
    2
    Par défaut Requete insert et update ne marche pas
    Bonjour

    J'ai un souci ma requete insert ou update ne marche pas. Aucun message d'erreur. mais mes requete select marche.

    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
    function conn_pdo(){
      try{
          $pdo = new PDO('mysql:host='._HOST_.';dbname='._DATABASE_, _USER_, _PASSWORD_);
          $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          return $pdo;
      }
      catch(Exception $e){
          echo 'Erreur : '.$e->getMessage().'<br />';
          echo 'N° : '.$e->getCode();
          exit();
      }
    }
    if (isset($_GET['cam']) && isset($_GET['lat']) && isset($_GET['lng'])){
      $conn = conn_pdo();
      try{
        $conn->beginTransaction();
        $count = $conn->exec("INSERT INTO cam (cam_id,cam_lat,cam_lng) 
                              VALUES ('{$_GET['cam']}','{$_GET['lat']}','{$_GET['lng']}') 
                              ON DUPLICATE KEY UPDATE cam_lat='{$_GET['lat']}',cam_lng='{$_GET['lng']}'");
      }
      catch (Exception $e){
        $conn->rollBack();
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
      }
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu n'as pas d'erreur PDO, c'est que tu ne rentres pas dans ta condition if{}.
    Tout de même, il faut utiliser une requête préparée : on ne place pas des données étrangères dans une requête brutalement.

  3. #3
    Membre régulier
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 124
    Points
    124
    Billets dans le blog
    2
    Par défaut
    Merci de ta réponse

    J'ai vérifie je rentre bien dans mon if et j'ai également fait la requête en préparer mais rien non plus

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Contrôle la valeur de rowcount() après l'insertion pour voir.

  5. #5
    Membre régulier
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 124
    Points
    124
    Billets dans le blog
    2
    Par défaut
    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
     
    if (isset($_GET['cam']) && isset($_GET['lat']) && isset($_GET['lng']))
    {
      $conn = conn_pdo();
      try
      {
        $conn->beginTransaction();
        echo "INSERT INTO cam (cam_id,cam_lat,cam_lng) 
              VALUES ('{$_GET['cam']}','{$_GET['lat']}','{$_GET['lng']}') 
              ON DUPLICATE KEY UPDATE cam_lat='{$_GET['lat']}',cam_lng='{$_GET['lng']}'";
     
     
     
        $stmt = $conn->prepare("INSERT INTO cam (cam_id,cam_lat,cam_lng) 
              VALUES (:valcam,:vallat,:vallng) 
              ON DUPLICATE KEY UPDATE cam_lat=:vallat,cam_lng=:vallng");
        $stmt->bindParam(':valcam', $_GET['cam']);
        $stmt->bindParam(':vallat', $_GET['lat']);
        $stmt->bindParam(':vallng', $_GET['lng']);
        $stmt->execute();
        echo $stmt->rowcount();
     
      }
      catch (Exception $e)
      {
        $conn->rollBack();
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
      }
    }
    J'ai bien mon echo de la requete qui s'affiche et le rowcount() qui me dit '1'

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta préparation n'est pas bonne : tu ne peux pas avoir plusieurs fois le même paramètre.

  7. #7
    Membre régulier
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 124
    Points
    124
    Billets dans le blog
    2
    Par défaut
    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
     
    if (isset($_GET['cam']) && isset($_GET['lat']) && isset($_GET['lng']))
    {
      $conn = conn_pdo();
      try
      {
        $conn->beginTransaction();
        echo "INSERT INTO cam (cam_id,cam_lat,cam_lng) 
              VALUES ('{$_GET['cam']}','{$_GET['lat']}','{$_GET['lng']}') 
              ON DUPLICATE KEY UPDATE cam_lat='{$_GET['lat']}',cam_lng='{$_GET['lng']}'";
     
     
     
        $stmt = $conn->prepare("INSERT INTO cam (cam_id,cam_lat,cam_lng) 
              VALUES (:valcam,:vallat,:vallng) 
              ON DUPLICATE KEY UPDATE cam_lat=:uplat,cam_lng=:uplng");
        $stmt->bindParam(':valcam', $_GET['cam']);
        $stmt->bindParam(':vallat', $_GET['lat']);
        $stmt->bindParam(':vallng', $_GET['lng']);
        $stmt->bindParam(':uplat', $_GET['lat']);
        $stmt->bindParam(':uplng', $_GET['lng']);
        $stmt->execute();
        echo $stmt->rowcount();
     
      }
      catch (Exception $e)
      {
        $conn->rollBack();
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
      }
    }
    mais ca m'affiche la meme chose

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suis surpris que les erreurs ne remontent pas.
    Tu as essayé sans la transaction ?

  9. #9
    Membre régulier
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 124
    Points
    124
    Billets dans le blog
    2
    Par défaut
    Non plus cela ne marche pas juste incroyable

  10. #10
    Membre régulier
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Points : 124
    Points
    124
    Billets dans le blog
    2
    Par défaut
    en farfouillant j'ai trouver ceci et ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
    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
     
    if (isset($_GET['cam']) && isset($_GET['lat']) && isset($_GET['lng']))
    {
      $conn = conn_pdo();
      $conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
      try
      {
        $conn->beginTransaction();
        echo "INSERT INTO cam (cam_id,cam_lat,cam_lng) 
              VALUES ('{$_GET['cam']}','{$_GET['lat']}','{$_GET['lng']}') 
              ON DUPLICATE KEY UPDATE cam_lat='{$_GET['lat']}',cam_lng='{$_GET['lng']}'";
     
     
     
        $stmt = $conn->prepare("INSERT INTO cam (cam_id,cam_lat,cam_lng) 
              VALUES (:valcam,:vallat,:vallng) 
              ON DUPLICATE KEY UPDATE cam_lat=:uplat,cam_lng=:uplng");
        $stmt->bindParam(':valcam', $_GET['cam']);
        $stmt->bindParam(':vallat', $_GET['lat']);
        $stmt->bindParam(':vallng', $_GET['lng']);
        $stmt->bindParam(':uplat', $_GET['lat']);
        $stmt->bindParam(':uplng', $_GET['lng']);
        $stmt->execute();
        echo $stmt->rowcount();
        $conn->commit();
     
      }
      catch (Exception $e)
      {
        $conn->rollBack();
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
      }
    }

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

Discussions similaires

  1. Erreur SQL 1442, Requete UPDATE ne marche pas
    Par noxa02 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 20/03/2012, 00h06
  2. inner join pour requete update ne marche pas
    Par Garra dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/01/2006, 13h14
  3. Réponses: 3
    Dernier message: 12/10/2005, 20h54
  4. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 08h16
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

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