Je met actuellement mon site à jour; j'ai creér un genre de MVC et en voulant ajouter un titre à mon artiste il m'affiche "ligne(s) inserée(s)" alors qu'il devrai m'afficher "1 ligne(s) inserée(s)" J'ai eu bo regardé mais je ne voie pas d'ou vient le probleme ???

connect.php

<?php
    try{    // On se connecte à MySQL
        $bdd = new PDO('mysql:host=localhost;dbname=nombdd', 'lol', 'pass',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    }

    catch(Exception $e){    // En cas d'erreur, on affiche un message et on arrête tout
        echo "<p>Erreur : " . $e->getMessage() . "</p>";
        exit();
    }

fichier php

require('connect.php');
        var_dump($_POST);

        $titres = $_POST'titre'];
        $artistes   = $_POST'artiste'];
        $auteurs    = $_POST'autor'];
        $url_img    = $clearname.'/'.$cleartitle.'.jpg';
        $url = mysql_real_escape_string($_POST'video']);
        $type = $_POST'type'];
        $ida = $_POST'ida'];

        $count = $bdd->exec('INSERT INTO videos SET titres="'.$titres.'", artistes="'.$artistes.'", auteurs="'.$auteurs.'", url_img="'.$url_img.'", url="'.$url.'", type="'.$type.'", id_artist="'.$ida.'" ');
        echo '<p>'.$count.' ligne(s) inserée(s)</p>';

var_dump

array (size=8)
  'artiste' => string 'Lol' (length=3)
  'titre' => string 'toto' (length=4)
  'url' => string 'http:// *********.****.fr/maphoto.jpg' (length=38)
  'video' => string 'aU_TQcyGkvY' (length=11)
  'autor' => string 'vevo' (length=4)
  'type' => string 'youtube' (length=7)
  'ida' => string '37' (length=2)
  'submit' => string 'Valider' (length=7)

8 réponses


vavoir
Auteur
Réponse acceptée

var_dump($teste);

object(PDOStatement)[2]
  public 'queryString' => string 'INSERT INTO videos SET titres="toto", artistes="Lol", auteurs="vevo", url_img="lol/toto.jpg", url="aU_TQcyGkvY", type="youtube", id_artist="37" ' (length=144)

var_dump($teste->execute());

boolean false

Donc le problème vient de execute() pourtant l'ortographe bon non ?

EDIT

Problème résolu, cela ne fonctionner pas car la colonne "id_artist" n'exister pas dans la BDD.

Le problème vient de $count qui ne compte pas le nombre de lignes insérées mais qui équivaut à l'exécution de ta requête ;) .
Faudrait que tu fasses un foreach qui boucle sur chaque insertion et que tu incrémentes ta variable $count en l'initialisant bien entendu à 0 dans le sous-controller ou même mieux dans le Controller principal.

vavoir
Auteur

le count s'affiche maintenant effectivement je sais pas ce que j'ai fait toujours est il que rien ne s'insert dans la bdd count affiche 0 !

require('connect.php');
        var_dump($_POST);

        $titres = $_POST'titre'];
        $artistes   = $_POST'artiste'];
        $auteurs    = $_POST'autor'];
        $url_img    = $clearname.'/'.$cleartitle.'.jpg';
        $url = mysql_real_escape_string($_POST'video']);
        $type = $_POST'type'];
        $ida = $_POST'ida'];

        $teste = $bdd->prepare('INSERT INTO videos SET titres="'.$titres.'", artistes="'.$artistes.'", auteurs="'.$auteurs.'", url_img="'.$url_img.'", url="'.$url.'", type="'.$type.'", id_artist="'.$ida.'" ');
        $teste->execute();
        $count = $teste->rowCount();
        echo '<p>'.$count.' ligne(s) inserée(s)</p>';

Fais un echo de 'INSERT INTO videos SET titres="'.$titres.'", artistes="'.$artistes.'", auteurs="'.$auteurs.'", url_img="'.$url_img.'", url="'.$url.'", type="'.$type.'", id_artist="'.$ida.'" '

Tu verras déjà si ta requête est correcte.

La fonction rowCount te renvoie le nombre de lignes affectées par la requêtes si la requête ne s'est pas passée alors rowCount t'enverras 0 puisqu'aucune ligne n'a été modifiée/insérée.
Comme l'a dit Gregory vérifie que ta requête fonctionne bien. Vérifies ce que contient toutes tes variables et au lieu d'utiliser MySQL_real_escape_string tu peux utiliser la fonction quotes de PDO je crois ;) .

vavoir
Auteur

Le mystère reste entier l'echo me revoie une ligne correcte ???

INSERT INTO videos SET titres="toto", artistes="Lol", auteurs="vevo", url_img="lol/toto.jpg", url="aU_TQcyGkvY", type="youtube", id_artist="37"

Ne fait pas un echo qui sert à afficher mais fait un var_dump de $bdd->prepare('ta requête'); si tu regardes dans la doc les valeurs de retour sont un état PDO si la préparation a réussi sinon un booléen false ou une exception ;) .
Donc si tu reçois un booléen ou une exception tu sais d'où viens le soucis sinon tu fais la même chose sur execute().
En sachant que execute renvoie true si ça c'est bien passé ou false dans le cas contraire.

P.S: Quand tu débug une application il faut regarder dans la doc les différentes valeurs de retours tu sauras en utilisant une fonction comme var_dump() ou debug_backtrace() qui est le coupable ainsi.

Donc le problème vient de execute oui.
Essayes ça:

$test = $bdd->prepare('INSERT INTO videos SET titres=?, artistes=?, auteurs=?, url_img=?, url=?, type=?, id_artist=?');
$test->execute( $titres,$artistes,$auteurs,$url_img,$url,$type,$ida);

Les ? sont des marqueurs dans execute tu fais passer chaque valeurs dans l'ordre que tu souhaites ça prendra la place des ? donc il faut mettre dans le même ordre que ta requête ;) .