PHP PDO 数据库连接类

标签 php mysql oop pdo database-connection

<分区>

这是我的数据库类:

<?php
// Define configuration
define("DB_RDBMS", "mysql");
define("DB_HOST", "localhost");
define("DB_NAME", "ccaweb");
define("DB_USER", "ccawebroot");
define("DB_PASS", "Ni2o7AwE");

class database {

    // Database Managment System (Database Type)
    private $rdbms      = DB_RDBMS;

    // Database Host Address/IP
    private $dbhost     = DB_HOST;

    // Database Name
    private $dbname     = DB_NAME;

    // Database User Name
    private $dbuser     = DB_USER;

    // Database Password
    private $dbpass     = DB_PASS;

    //
    private $con = false;

    public function __construct ()
    {
        //connect to database
        if (!$this->con)
        {
            //not yet connected, make a connection
            try
            {
                $this->db = new PDO($this->rdbms.':host='.$this->dbhost.';dbname='.$this->dbname, $this->dbuser, $this->dbpass);
                $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->con = true;
                return $this->con;
            }
            catch (PDOException $e)
            {
                require_once('/error/database_error.php');
                $date = date("d/m : H:i : ");

                file_put_contents('logs/db.connection.error.txt', $date.$e->getMessage().PHP_EOL,FILE_APPEND);
                exit();
            }
        }
        else
        {
            //already connected - do nothing and show true
            return true;
        }
    }

}
?>

这就是我为使用该类所做的事情:

// Import database class file
include_once '../library/class/database.class.php';

//create new database instance
$db = new database();

// Create Table
$query = "DROP TABLE IF EXISTS `courseannouncement`;
CREATE TABLE IF NOT EXISTS `courseannouncement` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `courseId` varchar(10) NOT NULL,
  `title` varchar(100) NOT NULL,
  `announcementText` text NOT NULL,
  `createdBy` int(11) NOT NULL,
  `createdDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `deleted` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
)";

$sth = $db->prepare("$query");
$sth->execute();

?>

但是我得到的错误是: fatal error :在第 22 行调用 D:..\installDatabase.php 中未定义的方法 database::prepare()

所以我尝试将数据库类更改为

class database extends PDO {

但这仍然给我一个错误

谁能指出我做错的方向? 是否使用类最佳实践进行 PDO 数据库连接?

此外, 我应该使用单例吗?我看到很多地方都说使用单例是好的,但也有很多帖子说使用单例是不好的。

最佳答案

你的逻辑有问题。您的类不扩展 PDO,它只是在内部实例化一个 PDO 对象,但绝不会将该对象暴露给任何使用您的类的人。

如果你有

$db->db->prepare(...)

然后它就可以工作了,因为您将访问您在对象中创建的 PDO 对象。

关于PHP PDO 数据库连接类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021079/

相关文章:

php - 文件上传错误

c# - 公共(public)方法未触发跨表单

oop - 在 Smalltalk 中,当发送者和参数是不同类型时,定义可交换二进制方法的最佳方法是什么?

php、mySQL 返回最后 x 行

javascript - 如何使用 Ajax 请求在 URL 中包含 GET 变量?

php - 如何用字母在前,符号在后对 MySQL 结果进行排序?

oop - 我应该使这些方法成为非静态的吗

php - 删除多个空格

mysql没有选择最佳索引

mysql - MySQL 中何时使用单引号、双引号和反引号