Maison > développement back-end > tutoriel php > Pourquoi \'Appel à une fonction membre préparer() sur un non-objet\' se produit-il en PHP et comment puis-je y remédier ?

Pourquoi \'Appel à une fonction membre préparer() sur un non-objet\' se produit-il en PHP et comment puis-je y remédier ?

Mary-Kate Olsen
Libérer: 2024-11-25 02:27:10
original
486 Les gens l'ont consulté

Why Does

Appel à la fonction membre préparer() sur un non-objet : Aide PHP

Problème :

L'erreur "Appel à une fonction membre préparer() sur un non-objet" se produit lors de la tentative d'appel d'une méthode sur un objet qui ne le fait pas. existe.

Cause :

L'extrait de code fourni initialise la variable $DBH en tant que nouvel objet de connexion MySQLi, mais ne parvient pas à la transmettre en tant que paramètre ou à la déclarer comme une variable globale dans la fonction selectInfo(). Par conséquent, la fonction ne peut pas accéder à l'objet et l'erreur est générée.

Solution :

Pour résoudre ce problème, envisagez les options suivantes :

  1. Utilisez le Global Mot clé :

    • function selectInfo($limit, $offset){
        global $DBH;
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      Copier après la connexion
  2. Passer la connexion en tant que Paramètre :

    • function selectInfo(MySQLi $DBH, $limit, $offset){
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      Copier après la connexion
  3. Créer une fonction pour obtenir la connexion à la base de données :

    • function getDBH(){
        static $DBH = null;
        if (is_null($DBH)) {
            $DBH = new mysqli(...);
        }
        return $DBH;
      }
      Copier après la connexion

    fonction selectInfo($limit, $offset){

    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    Copier après la connexion

    }

  4. Créer une classe Wrapper de base de données :

    • class Database {
        private $conn;
      
        public function __construct(){
            $this->conn = new mysqli(...);
        }
      
        public function selectInfo($limit, $offset){
            $stmt = $this->conn->prepare("SELECT * FROM information LIMIT ?,?");
        }
      Copier après la connexion
  5. Utilisez un Bibliothèque ou framework pré-construit :

    • Envisagez d'utiliser une bibliothèque ou un framework qui gère l'accès à la base de données, comme Doctrine ORM, ADODB ou un framework à part entière comme Zend.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal