Prepare Update

Par karl Trafi, il y a 4 ans


Base de données MySQL

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

StephaneL35, il y a 4 ans

Bonjour,
Peut on voir la Classe ?

karl Trafi, il y a 4 ans
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; }
StephaneL35, il y a 4 ans

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

karl Trafi, il y a 4 ans

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

StephaneL35, il y a 4 ans

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)

karl Trafi, il y a 4 ans

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 ) );
StephaneL35, il y a 4 ans

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

karl Trafi, il y a 4 ans

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.

StephaneL35, il y a 4 ans

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 ?

karl Trafi, il y a 4 ans

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

$req-> execute($attritbute);
StephaneL35, il y a 4 ans

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.

karl Trafi, il y a 4 ans

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