Je voudrais moifier les information se trouvant dans ma table proprietes

J'ai créer une fonction qui est suppose prendre paramettre une requette update ou delete et les attributes pour une requette prepare

public function prepareNoReturn($statement, $attritbute){
        $req = $this->getPDO()->prepare($statement);
        $req-> execute($attritbute);
    }

Mais lors de l'execution je rçois une

Erreur fatale et PDOException

Je n'arrive pas trouver d'ou proviens l'erreur

12 réponses


karl Trafi
Auteur
Réponse acceptée

Merci !
J'ai pu trouver la soulution en reverifiant la logique de mon code

Bonjour,
Peut on voir la Classe ?

class DataBase{
    private $db_name;
    private $db_user;
    private $db_host;
    private $db_pass;
    private $pdo;

    public function __construct__($db_name='immo',$db_user='root',$db_pass='',$db_host='localhost'){
        $this->db_name = $db_name;
        $this->db_user = $db_user;
        $this->db_host = $db_host;
        $this->db_pass = $db_pass;

    }
    private function getPDO(){
        if($this->pdo === null){
            $pdo = new PDO('mysql:dbname=dbname;host=localhost','root','');
            $pdo-> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
            $this->pdo = $pdo;
        }
        return $this->pdo;
    }

Qu'est ce que tu executes précisément ?
Ton constructeur est,ici, mal orthographié => " construct(...)"

c'est plutot la fonction getDB() qui s'execute pour lancé la base de donnée

getDB ? Tu veux dire getPDO()
D'où ma question, comment fais tu ton appel ?
(pour mémoire $pdo est une instance de PDO donc un objet pas une base de donnée)

Voici la fonction qui se charge de recuperer les données

       self::query('UPDATE proprietes SET
         `titre` = :titre, `prix` = :prix, `nbrChambre` = :nbrChambre, `nbrSalleBain` = :nbrSalleBain, `superficie` = :superficie, 
         `quartier` :quartier, `statut` = :statut, `Description` = :dscription , `dateConstruction` = :dateConstruction, `dateMiseVente` = :dateMiseVente,
          `images` = :images, `idAgent` = :idAgent, `categorie` = :categorie
             WHERE id = :id',
            array(
                ':titre' => $titre, 
                ':prix' => $prix, 
                ':nbrChambre' => $nbrChambre, 
                ':nbrSalleBain' => $nbrSalleBain, 
                ':superficie' => $superficie, 
                ':quartier' => $quartier, 
                ':statut' => $statut, 
                ':dscription' => $Description, 
                ':dateConstruction' => $dateConstruction, 
                ':dateMiseVente' => $dateMiseVente, 
                ':images' => $images, 
                ':idAgent' => $idAgent, 
                ':categorie' => $categorie,
                ':id' => $id
            )
    );

On ne va pas tout debugger non plus ...
Globalement, j'utiliserai des guillements (") pour encadrer ta requete, manifestement, il manque une égalité (=) et cela ne répond pas à la question : comment executes tu ton code ?
Utilises tu un éditeur avec une coloration syntaxique ? tu gagnerais en facilité de re-lecture

Une fois les données validé dans le formulaire, ils sont récuper par la fonction updateProprietes pour creer la requette prepare, et ensuite la renvoi dans le fonction query.
query verifie alors si nous avons bien une requette prepare et se rassure si c'est une requette UPDATE puis à son tour il redirige vers la method prepareNoReturn qui fait appelle a getPDO utilise prepare et execute .

j'espère que vous allez comprendre.

Je n'attendais pas l'explication de la logique de l'execution mais son code.
les erreurs "Erreur fatale" et "PDOException" s'accompagnent habituellement d'un descriptif minimaliste.
Quel est il ? Ne peut il pas t'aider à debugguer ?

Dans mon cas, il y a juste le chemin vers la cette ligne

$req-> execute($attritbute);

Ce n'est toujours pas ce que j'attendais ...
Je tente une proposition à l'aveugle ...
Si je fais ceci :
$db = new DataBase();
$db->prepareNoReturn('SELECT titre FROM proprietes where id = :id', [':id' => 1] );
Je n'ai pas d'erreur.

Si je fais ceci :
$db = new DataBase();
$db->prepareNoReturn('SELECT titre FROM proprietes where id :id', [':id' => 1] );
J'ai une erreur fatale.