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
Merci !
J'ai pu trouver la soulution en reverifiant la logique de mon code
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(...)"
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.