Fatale fout: oproep naar een lidfunctie Bereid () op null

Ik probeer toegang te krijgen tot een lijst met categorieën en hun inhoud. Ik heb een klasse categorieën. Ik krijg deze foutmelding. Het rare ding is dat ik zoveel exacte code op twee andere plaatsen heb gebruikt tot nu toe zonder problemen. Alles wat ik hier deed was de code hergebruiken en verander alle variabelen.

Fatal error: Call to a member function prepare() on null

Hier is de code in mijn klas:

   <?php
class Category {
    public function fetch_all() {
        global $pdo;
        $query = $pdo->prepare("SELECT * FROM dd_cat");
        $query->execute();
        return $query->fetchAll();
    }
    public function fetch_data($cat_id) {
        global $pdo;
        $query = $pdo->prepare("SELECT * FROM dd_cat WHERE cat_id = ?");
        $query->bindValue(1, $cat_id);
        $query->execute();
        return $query->fetch();
    }
}
?>

en hier is de code die ik probeer te bellen:

<?php
session_start();
//Add session_start to top of each page//
require_once('includes/config.php');
require_once('includes/header.php');
include_once('includes/category.php');
?>
<link rel="stylesheet" href="css/dd.css">
    <div id="menu">
        <a class="item" href="drop_index.php">Home</a> -
        <a class="item" href="create_topic.php">Create a topic</a> -
        <a class="item" href="create_cat.php">Create a category</a>
        <div id="userbar">
<?php
    if( $user->is_logged_in() )
    {
        echo 'Hello ' . $_SESSION['user_name'] . '. Not you? <a href="logout.php">Sign out</a>';
    }
    else
    {
        echo '<a href="login.php">Sign in</a> or <a href="index.php">create an account</a>.';
    } 
?>
        </div>
    </div>
<?php
$category = new Category;
$categories = $category->fetch_all();
?>
    <div id ="wrapper">
        <h1>Categories</h1>
        <section>
            <ul>
                <?php foreach ($categories as $category) { ?>
                    <li><a href="category.php?id=<?php echo $category['cat_id']; ?>">
                        <?php echo $category['cat_title']; ?></a> 
                    </li>
                <?php } ?>
            </ul>
        </section>
    </div>
<?php
require_once('includes/footer.php');
?>

Antwoord 1, autoriteit 100%

Het lijkt erop dat uw variabele $pdoniet is geïnitialiseerd.
Ik kan in de code die je hebt geüpload niet zien waar je deze initialiseert.

Zorg ervoor dat u een nieuw PDO-object maakt in het global scopevoordat u de klassenmethoden aanroept. (Je moet het in de globale scope declareren vanwege de manier waarop je de methoden in de categorie Categorie hebt geïmplementeerd).

$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

Antwoord 2

Je kunt PDOExceptions proberen/vangen (je configuraties kunnen verschillen, maar het belangrijkste is de try/catch):

try {
        $dbh = new PDO(
            DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET,
            DB_USER,
            DB_PASS,
            [
                PDO::ATTR_PERSISTENT            => true,
                PDO::ATTR_ERRMODE               => PDO::ERRMODE_EXCEPTION,
                PDO::MYSQL_ATTR_INIT_COMMAND    => 'SET NAMES ' . DB_CHARSET . ' COLLATE ' . DB_COLLATE
            ]
        );
    } catch ( PDOException $e ) {
        echo 'ERROR!';
        print_r( $e );
    }

De print_r( $e );LINE zal u alles laten zien wat u nodig hebt, bijvoorbeeld ik had een recent geval waarin het foutbericht was als unknown database 'my_db'.


Antwoord 3

@ Delato468 Commentaar moet worden vermeld als een oplossing omdat het voor mij werkte.

Naast het definiëren van de parameter, moet de gebruiker het ook doorgeven op het moment van het bellen van de functie

fetch_data(PDO $pdo, $cat_id)

Antwoord 4

Ik heb ook hetzelfde probleem geconfronteerd.
Voor mij is de IF-conditie voordat de poging vangst niet correct was.
het moet

zijn

public static function getdb()
    {
        if(!isset(self::db)) <!-- For me it was if(isset(self::db)) i got the logic right and it worked--> 
        {
            try
            {
            }
            catch (PDOException $e){
                $msg = $e->getMessage();
                echo $msg;
                exit();
            }
        }
        return self::db;
    }

Antwoord 5

In —- Model:
Toevoegen use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

Wijzig de class ----- extends Model Naar class ----- extends Eloquent

Other episodes