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
473 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!

source:php.cn
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