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

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