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 $pdo
niet 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 scope
voordat 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 PDOException
s 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