PDO connection class


PDO connection class

所以我正在尝试构建一个简单的PDO连接类,以便我可以在需要数据库访问权限时创建一个数据库对象,但无论我尝试什么,我都会收到相同的错误。

这是我的数据库类代码

<?php
class DbConnect
{
// Database login vars
private $dbHostname = 'localhost';
private $dbDatabase = 'database';
private $dbUsername = 'username';
private $dbPassword = 'password';
public $db = null;
public function connect()
{
    try
    {
        $db = new PDO("mysql:host=".$this->dbHostname.";dbname=".$this->dbDatabase, $this->dbUsername, $this->dbPassword); // Establish DB connection
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set error handling
        return $db;
    }
    catch(PDOException $e)
    {
        echo "It seems there was an error.  Please refresh your browser and try again. ".$e->getMessage();
    }
}
}
?>

这是我尝试使用它的类的代码:

<?php
session_start();
require 'DbConnect.php';
class User
{
    public function bindParams()
    {
        $DbConnect = new DbConnect();
        $sql = $DbConnect->connect();
        $sql->prepare("insert into dbobjectex(firstName, lastName) values (:firstName, :lastName)");
        $sql->bindParam(':firstName', $_SESSION['firstName']);
        $sql->bindParam(':lastName', $_SESSION['lastName']);
        $sql->execute();
    }
}
?>

然后从我创建 User 类的位置调用 bindParams()。 我不断收到的两个错误是"NetworkError:500 Internal Server Error"和"未声明 HTML 文档的字符编码"。 关于我在这里做错了什么的任何想法? 感谢您的任何建议。

What am I doing wrong here? - 很多事情,但最明显要错过的是:在 DbConnect 类定义结束时,您正在关闭 php 标签 ?> ,您必须尽可能避免包含包含文件的文件。在您的情况下使用它们的结果是标头过早发送,从而解释了您的第二个错误。

除此之外,每次实例化用户类时,您都会创建一个新的 PDO 实例:将其分配给 connect 成员函数的本地变量,至少将$db替换为 $this->db 。但最重要的是,我同意@sabre:为什么PDO需要额外的包装器?特别是一个只做实例化和返回PDO实例的实例,只需创建一个抽象类来处理连接(如果需要的话)。

您可能要检查的另一件事是天气是否包含路径是否正确,并阅读有关自动加载类的文档。一旦你有一个大量的类库,它将为你省去一个麻烦的世界。这可以解释你的第一个错误,就像?>标签一样,但为了安全起见:使用require_once,而不是require:包括并因此重新定义一个类第二次根本不是你想要做的。