PDO-列出连接成功的博客条目:致命错误:在非对象上调用成员函数prepare()


PDO - Listing blog entries with successful connection: Fatal error: Call to a member function prepare() on a non-object

我是在PHP中使用PDO和OOP的新手。在发布之前,我已经在网上查看了其他关于这个错误的stackoverflow问题。我有一种感觉,可能是因为我下面的代码,所以我要联系。

我正在尝试列出数据库中某个表的blog_title。

<!DOCTYPE HTML>
  <head>
    <title>Simple blog</title>
  </head>
  <body>
    <h1>Listing blog titles</h1>
    <?php
        include "system/connection.php";
        $sql = "SELECT * FROM blogs ORDER BY id DESC";
        $getentries = $dbh->prepare($sql);
        if ($getentries->execute(array($_GET['blog_title']))) {
          while ($row = $getentries->fetch()) {
            print_r($row);
          }
        }
    ?>
  </body>
</html>

连接成功。这是我的连接脚本。

<?php
$servername = "localhost";
$dbname = "simple_blog";
$username = "root";
$password = "";
try {
    global $dbh;
    $dbh = new PDO('mysql:host=localhost;dbname=simple_blog', $username, $password);
    {
        print("Connection success!");
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

这是我收到的错误:

致命错误:在第13行的C:''examplep''htdocs''simple-blog''index.php中,对非对象调用成员函数prepare()

任何能帮助我理解这一点的指导都将不胜感激。

提前谢谢。

Adam

很简单,在启动连接后,您将分配null:)

    global $dbh;
    $dbh = new PDO('mysql:host=localhost;dbname=simple_blog', $username, $password);
    {
        print("Connection success!");
    }

删除$dbh=null,就可以开始了。此外,不需要将其分配为全局变量,因为在调用SQL之前,您已经包含了它。

我不知道你为什么指定null,但这意味着你正在用null重写连接。

如果您在某个地方听说"您需要关闭连接",那么这应该在您调用SQL并解析结果之后完成,但通常在PHP中没有必要关闭连接,因为它已经得到了处理。