Maison >développement back-end >tutoriel php >Comment utiliser correctement une connexion PDO sur plusieurs classes en PHP ?

Comment utiliser correctement une connexion PDO sur plusieurs classes en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 00:50:081033parcourir

How to Properly Use a PDO Connection Across Multiple Classes in PHP?

Comment utiliser la connexion PDO dans d'autres classes ?

Comprendre l'erreur déroutante

Un message d'erreur indiquant « Erreur non détectée : appel à une base de données de méthode non définie ::prepare()" peut survenir lors de la tentative d'utilisation d'une connexion PDO dans une classe distincte. Cette erreur provient d'une mauvaise compréhension de la façon dont la programmation orientée objet (POO) interconnecte les objets.

Résoudre le problème

1. Repensez votre classe de base de données :
La classe de base de données existante ne sert à rien. Au lieu de cela, concentrez-vous sur la création d'une classe wrapper si elle étend les fonctionnalités de PDO.

2. Établissez une connexion à la base de données centrale :
Instancier un objet $db autonome à l'aide de PDO ou de votre classe de base de données améliorée. Cette connexion unique servira de pierre angulaire à toutes les futures activités de base de données.

3. Transmettez la connexion en tant que paramètre de constructeur :
Chaque classe nécessitant un accès à la base de données doit recevoir la connexion $db en tant qu'argument de constructeur. Cette approche garantit un accès transparent à la base de données dans l'ensemble de votre application.

Un exemple complet

Considérez les améliorations suivantes base de code :

database.php :

$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new \PDO($dsn, $user, $pass, $opt);

user.php :

class User {
    /* Properties */
    private $conn;

    /* Get database access */
    public function __construct(\PDO $pdo) {
        $this->conn = $pdo;
    }

    /* List all users */
    public function getUsers() {
        return $this->conn->query("SELECT username, usermail FROM user")->fetchAll();
    }
}

app .php :

include 'database.php';
$user = new User($pdo);
$list = $user->getUsers();

foreach($list as $test) {
    echo $test["username"],"\n";
}

Cette base de code raffinée illustre l'utilisation correcte de Connexions PDO dans plusieurs classes, garantissant un fonctionnement sans erreur et des pratiques de codage élégantes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn