Maison > développement back-end > tutoriel php > Pourquoi mon code PHP renvoie-t-il une erreur « Appel à une fonction membre préparer() sur un non-objet » et comment puis-je la corriger ?

Pourquoi mon code PHP renvoie-t-il une erreur « Appel à une fonction membre préparer() sur un non-objet » et comment puis-je la corriger ?

Barbara Streisand
Libérer: 2024-11-24 05:45:11
original
781 Les gens l'ont consulté

Why does my PHP code throw a

Appel à une fonction membre préparer() sur un non-objet

Votre code PHP déclenche un message d'erreur indiquant que vous tentez d'accéder à la méthode préparer() d'un objet qui n'existe pas. Examinons le code fourni pour identifier la source de cette erreur :

$DBH = new mysqli("host", "test", "123456", "dbname");

function selectInfo($limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}

selectInfo();
Copier après la connexion

L'erreur provient de la portée de la variable $DBH. Dans la fonction selectInfo(), vous essayez d'accéder à $DBH sans spécifier sa portée. Puisque $DBH n'est pas défini dans la fonction, il n'est pas accessible directement.

Pour résoudre ce problème, vous disposez de plusieurs options :

1. Utilisez le mot-clé global :

function selectInfo($limit, $offset) {
    global $DBH;

    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}
Copier après la connexion

2. Passez $DBH comme paramètre de fonction :

function selectInfo($DBH, $limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}
Copier après la connexion

3. Créez une fonction pour récupérer $DBH :

function getDBH() {
    static $DBH = null;

    if (is_null($DBH)) {
        $DBH = new mysqli("host", "test", "123456", "dbname");
    }

    return $DBH;
}

function selectInfo($limit, $offset) {
    $DBH = getDBH();

    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}
Copier après la connexion

En implémentant l'une de ces options, vous établirez la portée correcte pour $DBH dans la fonction selectInfo(), lui permettant d'accéder à la base de données nécessaire. connexion.

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