[SQL] Conserver le database handler dans l'objet
Bonjour,
Je m'essaie à la POO en php.
J'ai créé une classe qui me permet de gérer les commandes
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class commandes {
private $dbh;
function __construct() {
try {
$dbh = new PDO('mysql:host=xxx.xx.fr;dbname=yy', 'lllooo', 'huhu', array(PDO::ATTR_PERSISTENT => true));
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
function cmdes_non_exp() {
$stmt = $dbh->prepare("select id_cmde from commandes where id_etat = ?");
$cpt = 0;
if ($stmt->execute(array(1))) {
while ($row = $stmt->fetch()) {
print "Commande No $row[0]\n";
}
}
} |
Ce code provoque l'affichage de l'erreur
Citation:
Fatal error: Call to a member function prepare() on a non-objec
Pourquoi ? Si j'insère le code du contructeur dans la méthode, la requête sql fonctionne... Il me semble que le database handler devrait être créé par le constructeur puis accessible depuis les différentes méthodes non ? Sinon, il faudrait ouvrir la cnx dans chaque méthode ? Il doit bien y avoir un moyen de rationnaliser tout cela mais lequel ? J'ai beau essayer, je ne trouve pas la solution.
Merci pour votre aide.
RG