关于php:PDO-致命错误:在null上调用成员函数prepare()

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

我在这里搜索了类似的问题,但是无法解决我的问题。

我正在尝试向我的网站添加搜索功能,但是由于某些原因,搜索结果没有显示。 在我的error_log中,出现以下错误:

PHP Fatal error: Call to a member function prepare() on null in /home/..../search.php on line 9

这是这行:

1
$query = $pdo->prepare("SELECT * FROM subs WHERE sub_title LIKE '%$search%' LIMIT 0, 10");

这是我的search.php代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
require_once('includes/config.php');
include("includes/header.php");

// Search from MySQL database table
$search = $_POST['search'];
$query = $pdo->prepare("SELECT * FROM subs WHERE sub_title LIKE '%$search%' LIMIT 0, 10");
$query->bindValue(1,"%$search%", PDO::PARAM_STR);
$query->execute();

// Display search result
if(!$query->rowCount() == 0) {
echo"Search found:";
echo"<table>";
echo"<tr><td>Title</td><td>Category></td><td>Language</td><td>Time</td><td>Download</td></tr>";
while($results = $query->fetch()) {
    echo"<tr><td>";
    echo $results['sub_title'];
    echo"</td><td>";
    echo $results['category'];
    echo"</td><td>";
    echo $results['sub_lang'];
    echo"</td><td>";
    echo $results['timestamp'];
    echo"</td><td>";
    echo $results['sub_data'];
    echo"</td></tr>";
}

echo"</table>";
} else {
echo"Nothing found";
}

?>

这是我的config.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$username = '------';
$password = '------';

try {
$conn = new PDO('mysql:host=localhost;dbname=-----', $username, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
}

catch(PDOException $e) {
echo"Failed to connect to database!" ."";
echo $e->getMessage();
}
?>

这是我的搜索表,它位于header.php中

1
2
3
<form class="form-inline" action="search.php" method="POST">
     <input class="form-control" name="search" id="search" type="text" placeholder="Search">
 </form>


您正在使用:$query = $pdo->prepare

它应该是:

$query = $conn->prepare()

因为我是一个懒惰的编码器,所以我制作了一个新类来节省一些时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class DBCommon
{
    private $conn;

    /** @var Common */
    public $common;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }
}