Bonjour,
Je travail sur le tuto "POO et création de models", dans ce tutot est utilisé une méthode procédurale, je souhaitais donc le faire en PDO.
Je me trouve confronté au problème suivant :
Notice : Undefined variable: dbh in ../Site/PooModels/category.php on line 7
Fatal error : Call to a member function query() on a non-object in ../Site/PooModels/category.php on line 7
ok j'ai compris que la variable dbh n'est pas définie et la fatal error reste un peu abstraite mais certainement conséquente à l'absence de dbh.
struture de mon site:
category.php .....> contient
<?php
class Category{
public $id;
function read($fields){
$sql = $dbh->query("SELECT $fields FROM categories WHERE id=".$this->id);
$sql->setFetchMode();
while($result = $sql->fetch())
{
echo $result;
}
}
}
?>
core.php .........> contient
<?php
define('USER','root');
define('PASS','root');
define('DSN','mysql:host=localhost;dbname=tuto');
try {
$dbh= new PDO(DSN,USER,PASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
echo "Erreur ! :" .$e->getMessage(). "<br/>";
die();
}
?>
index.php ......> contient :
<?php
require 'core.php';
require 'category.php';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<title>Test PDO MODELS</title>
<link rel="stylesheet" href="css/main.css" type="text/css" />
<!--[if IE]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if lte IE 7]> <script src="js/IE8.js" type="text/javascript"></script><![endif]--> <!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="css/ie6.css"/><![endif]-->
</head>
<body>
<?php
$c = new Category();
$c->id = 2;
print_r($c->read("name"));
?>
</body>
</html>
la variable dbh existe donc dans le core mais semble être occulté une fois appelé dans index.php. J'ai tenté de mettre la connection via PDO directement dans la fonction read et ça fonctionne. Pourquoi en dehors de la fonction cela ne fonctionne pas, dois je integrer un deuxieme paramètre dans la fonction qui correspondrait a dbh ? une solution?
Donc au final la solution est la suivante, il fallait bien intégrer en deuxième paramètre la connexion ici $dbh:
<?php
class Category{
public $id;
function read($fields,$dbh){
$sql = $dbh->query("SELECT $fields FROM categories WHERE id=".$this->id);
$data = $sql->fetchAll();
return $data;
}
}
?>
<?php
class Category{
public $id;
function read($fields,$dbh){
$sql = $dbh->query("SELECT $fields FROM categories WHERE id=".$this->id);
$data = $sql->fetchAll();
return $data;
}
}
?>
c'était la solution ^^