gpt4 book ai didi

php - PDO连接类

转载 作者:行者123 更新时间:2023-11-29 14:19:48 25 4
gpt4 key购买 nike

因此,我尝试构建一个简单的 PDO 连接类,以便每当我需要访问数据库时都可以创建一个数据库对象,但无论我尝试什么,我都会遇到相同的错误。

这是我的 DB 类代码

<?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 文档的字符编码未声明”。关于我在这里做错了什么有什么想法吗?感谢您的任何建议。

最佳答案

我在这里做错了什么? - 很多事情,但最明显要错过的是:在 DbConnect 类定义的末尾,你'重新关闭 php 标签 ?>,您必须在包含的文件中尽可能避免 with included files 。在您的情况下使用它们的结果是过早发送 header ,这解释了您的第二个错误。

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

您可能想要检查的另一件事是天气或包含路径是否正确,并且 read the docs on autoloading classes 。一旦您拥有了丰富的类库,它将为您省去很多麻烦。这可能可以解释您的第一个错误,?> 标记也可以解释,但为了安全起见:使用 require_once,而不是 require :再次包含并重新定义一个类根本不是您想要做的事情。

关于php - PDO连接类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11931219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com