我正在尝试访问类别及其内容列表。我有一个名为Categories的课程。我一直收到这个错误。奇怪的是,到目前为止,我在其他两个地方使用过相同的代码并没有任何问题。我在这里所做的只是重用代码并更改所有变量。
Fatal error: Call to a member function prepare() on null
以下是我班级的代码:
<?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();
}
}
?>
以下是我要调用的代码:
<?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');
?>
答案 0 :(得分:31)
看起来您的$pdo
变量未初始化。
我无法在您初始化的代码中看到。
确保在调用类方法之前在global scope
中创建新的PDO对象。 (您应该在全局范围内声明它,因为您在Category类中实现了这些方法。)
$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
答案 1 :(得分:0)
你可以尝试/捕捉PDOException
s(你的配置可能有所不同,但重要的部分是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 );
}
print_r( $e );
行会显示您需要的所有内容,例如我最近出现的错误消息类似于unknown database 'my_db'
的情况。
答案 2 :(得分:0)
@ delato468评论必须作为对我有用的解决方案列出。
除了定义参数外,用户在调用函数时也必须传递参数
fetch_data(PDO $pdo, $cat_id)
答案 3 :(得分:0)
我也遇到了同样的问题。 对我来说,try catch 之前的 if 条件不正确。 应该是
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;
}
答案 4 :(得分:-1)
在----型号中:
添加use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
将 class ----- extends Model
更改为 class ----- extends Eloquent