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 avec mysqli_sql_exception:execute()


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut Erreur avec mysqli_sql_exception:execute()
    Bonjour,

    J'obtiens l'erreur "mysqli_sql_exception:execute()" sans plus de précision et pourtant que je n'ai pas d'erreur dans ma requête et je précise que ma connexion se fait bien.
    Je vous remercie de votre aide si vous avez une idée car je ne vois pas bien ce que cela peut être.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    /*Connexion*/
    if (!defined('SERVEUR')) {
        define('SERVEUR', 'localhost');
    }
    if (!defined('UTILISATEUR')) {
        define('UTILISATEUR', 'root');
    }
    if (!defined('MDP')) {
        define('MDP', '');
    }
    if (!defined('DB')) {
        define('DB', 'sondages');
    }
     
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
        $conn = new mysqli(SERVEUR, UTILISATEUR, MDP, DB);
        echo 'Connecté avec succès !';
    } catch (Exception $e) {
        echo 'ERROR:'.$e->getMessage();
    }
     
     
    /*********PROVISOIRE*************/
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    /*******************************/
     
      function getIp()
      {
          if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
              $ip = $_SERVER['HTTP_CLIENT_IP'];
          } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
              $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
          } else {
              $ip = $_SERVER['REMOTE_ADDR'];
          }
     
          return $ip;
      }
     
    require 'controller/dbConfig.php';
     
                if (isset($_POST['valider'], $_POST['musique'], $_POST['paroles'], $_POST['voix'],$_POST['commentaire'], $_POST['heureValidation'])) {
                    $musique = htmlspecialchars($_POST['musique']);
                    $paroles = htmlspecialchars($_POST['paroles']);
                    $voix = htmlspecialchars($_POST['voix']);
                    $commentaire = htmlspecialchars($_POST['commentaire']);
                    $referer = $_SERVER['HTTP_REFERER'];
                    $navigateur = $_SERVER['HTTP_USER_AGENT'];
                    $heureValidation = htmlspecialchars($_POST['heureValidation']);
                    $adresse_IP = getIp();
                } else {
                    echo 'Erreur 1 !';
                }
     
    // INSERTION VOTE
    $sql1 = 'INSERT INTO je_fais_des_reves (musique, paroles, voix, commentaire, referer, navigateur, heureValidation, adresse_IP) VALUES  (?,?,?,?,?,?,?,?)';
    if ($stmt = $conn->prepare($sql1)) {
        $stmt->bind_param('iiisssss', $musique, $paroles, $voix, $commentaire, $referer, $navigateur, $heureValidation, $adresse_IP);
        $stmt->execute();
    } else {
        echo 'Erreur 2 !';
    }
    $stmt->close();

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Je vois quelque chose de bizarre :
    Les 3 premiers paramètres sont sensés être des entiers vu les valeur de bind_param(), alors pourquoi, plus haut, la fonction htmlspecialchars() est appliquée à ces variables ?

    Cependant, on en sait très peu sur ce qui ne va pas.
    Il y a probablement moyen d'avoir un peu plus d'info sur les erreurs en essayant d'afficher $conn->error ou $stmt->error

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    Merci, c'est un fait au départ, j'avais prévu des valeurs de texte: Bon, Pas bon etc. et j'ai fini par mettre des valeurs numériques: 1, 2, 3 etc.
    J'ai essayé de cette façon mais aucune erreur s'affiche:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $stmt->execute();
    printf($stmt->error);
    printf($conn->error);

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    N'affichez-vous pas les erreurs ?
    De mon côté; j'ai testé votre code avec un tableau de données défini manuellement, et j'obtiens un message d'erreur que voici :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Connecté avec succès !
    Notice: Undefined index: HTTP_REFERER in /public_html/test-pdo.php on line 62
     
    Fatal error: Uncaught mysqli_sql_exception: Data too long for column 'navigateur' at row 1 in /public_html/test-pdo.php:74 Stack trace: #0 public_html/test-pdo.php(74): mysqli_stmt->execute() #1 {main} thrown in /public_html/test-pdo.php on line 74

    Pour tester, j'ai juste mis en commentaire la ligne require 'controller/dbConfig.php'; et je défini manuellement les valeurs de $_POST :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $_POST = [
        'valider' => true,
        'musique' => 'ABC',
        'paroles' => 'DEF',
        'voix' => 'GHI',
        'commentaire' => 'JKL',
        'heureValidation' => 'MNO',
    ];

    Pour info et par rapidité, pour tous les champs je les ai créé en tant que VARCHAR(60) et c'est pour ça que le USER_AGENT ne rentre pas dedans
    Dès que je change les valeurs dans le code pour quelque chose de simple, tout votre code fonctionne.

    Voici donc le code complet qui fonctionne :
    Code php : 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    <?php
     
    /* Connexion */
    if (!defined('SERVEUR')) {
        define('SERVEUR', 'localhost');
    }
    if (!defined('UTILISATEUR')) {
        define('UTILISATEUR', 'XXXXXXXXXXXXXXXXXXXX');
    }
    if (!defined('MDP')) {
        define('MDP', 'XXXXXXXXXXXXXXXXXXXXXXX');
    }
    if (!defined('DB')) {
        define('DB', 'XXXXXXXXXXXXXXXXXXXXXXXXX');
    }
     
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
        $conn = new mysqli(SERVEUR, UTILISATEUR, MDP, DB);
        echo 'Connecté avec succès !';
    } catch (Exception $e) {
        echo 'ERROR:' . $e->getMessage();
    }
     
     
    /* * *******PROVISOIRE************ */
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    /* * **************************** */
     
    function getIp() {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
     
        return $ip;
    }
     
    //require 'controller/dbConfig.php'; 
    /**
     * Définition manuelle des données
     */
    $_POST = [
        'valider' => true,
        'musique' => 'ABC',
        'paroles' => 'DEF',
        'voix' => 'GHI',
        'commentaire' => 'JKL',
        'heureValidation' => 'MNO',
    ];
     
    if (isset($_POST['valider'], $_POST['musique'], $_POST['paroles'], $_POST['voix'], $_POST['commentaire'], $_POST['heureValidation'])) {
        $musique = htmlspecialchars($_POST['musique']);
        $paroles = htmlspecialchars($_POST['paroles']);
        $voix = htmlspecialchars($_POST['voix']);
        $commentaire = htmlspecialchars($_POST['commentaire']);
        $referer = "referer"; // Overwrite de ces données pour qqch qui rentre dans ma DB
        $navigateur = "user_agent"; // Overwrite de ces données pour qqch qui rentre dans ma DB
        $heureValidation = htmlspecialchars($_POST['heureValidation']);
        $adresse_IP = getIp();
    } else {
        echo 'Erreur 1 !';
    }
     
    // INSERTION VOTE
    $sql1 = 'INSERT INTO je_fais_des_reves (musique, paroles, voix, commentaire, referer, navigateur, heureValidation, adresse_IP) VALUES  (?,?,?,?,?,?,?,?)';
    if ($stmt = $conn->prepare($sql1)) {
        $stmt->bind_param('iiisssss', $musique, $paroles, $voix, $commentaire, $referer, $navigateur, $heureValidation, $adresse_IP);
        $stmt->execute();
    } else {
        echo 'Erreur 2 !';
    }
    $stmt->close();

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    J'ai dû m'embrouiller quelque part alors j'ai recommencé en mettant pour la variable $navigateur à TEXT dans ma db et ça fonctionne bien et les erreurs s'affichaient bien, merci d'avoir pris du temps:

    Code php : 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
    <?php
     
    require 'controller/dbConfig.php';
    function getIp()
    {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
     
        return $ip;
    }
     
    if (isset($_POST['valider'], $_POST['musique'], $_POST['paroles'], $_POST['voix'], $_POST['commentaire'], $_POST['heureValidation'])) {
        $musique = $_POST['musique'];
        $paroles = $_POST['paroles'];
        $voix = $_POST['voix'];
        $commentaire = htmlspecialchars($_POST['commentaire']);
        $referer = $_SERVER['HTTP_REFERER'];
        $navigateur = $_SERVER['HTTP_USER_AGENT'];
        $heureValidation = htmlspecialchars($_POST['heureValidation']);
        $adresse_IP = getIp();
    } else {
        echo 'Erreur 1 !';
    }
     
    $sql1 = 'INSERT INTO je_fais_des_reves (musique, paroles, voix, commentaire, referer, navigateur, heureValidation, adresse_IP) VALUES  (?,?,?,?,?,?,?,?)';
    if ($stmt = $conn->prepare($sql1)) {
        $stmt->bind_param('iiisssss', $musique, $paroles, $voix, $commentaire, $referer, $navigateur, $heureValidation, $adresse_IP);
        $stmt->execute();
    } else {
        echo 'Erreur 2 !';
    }
     
    $stmt->close();
    $conn->close();
     
      header('Location: resultats.php');
      exit();

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

Discussions similaires

  1. [sql dynamique] Erreur avec EXECUTE IMMEDIATE
    Par Foublanc1 dans le forum SQL
    Réponses: 0
    Dernier message: 06/05/2013, 14h46
  2. [WD16] Erreur avec la commande HNbRec apres execution d'une requete
    Par Mordehai dans le forum WinDev
    Réponses: 21
    Dernier message: 29/05/2012, 10h28
  3. [WD16] Erreur avec la commande HNbEnr apres execution d'une requete
    Par Mordehai dans le forum WinDev
    Réponses: 1
    Dernier message: 21/05/2012, 17h59
  4. [AC-2003] Problème avec oDB.Execute"Insert into" erreur 3061
    Par SIGER_971 dans le forum Access
    Réponses: 5
    Dernier message: 08/07/2009, 11h54
  5. Réponses: 4
    Dernier message: 16/10/2007, 13h22

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