【问题标题】:Writing a database connection in index.php file在 index.php 文件中编写数据库连接
【发布时间】:2016-04-25 21:47:54
【问题描述】:

我在index.php 文件中有一个到数据库的 PDO 连接。

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "dbname";
$dbh_conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$dbh_conn->exec("set names utf8");
$dbh_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我网站的几乎所有页面都需要数据库。还有一些页面不需要数据库,但是因为所有页面都从index.php 传递,所以该连接执行。我的意思是所有页面(甚至那些不需要数据库的页面)都有一个数据库连接。

这是一件坏事吗?我应该改变我所有的结构吗?同样,大多数页面需要数据库,只有少数页面不需要。那我做的好吗?

【问题讨论】:

  • 将数据库连接添加到新文件并将其包含在需要数据库连接的任何页面中 - 如果细节发生变化或您需要以某种方式调整连接,则可以节省大量编辑
  • 在所有页面上连接到数据库会使您更有可能遇到数据库的连接限制。您应该只在真正使用数据库的页面中执行此操作。
  • @Barmar 加油,我们所有的网站都一样。达到限制的原因不是所有页面上的连接。
  • @YourCommonSense 那么你的意见到底是什么?所有页面的连接都可以吗?还是有问题?

标签: php mysql database pdo


【解决方案1】:

您需要为数据库连接创建一个singleton 类,而不仅仅是运行代码。

class DB {
    private static $instance;
    private $_dbh_conn = null;

    public static function getInstance() {
        if (null === static::$instance) {
            static::$instance = new static();
        }

        return static::$instance;
    }

    protected function __construct() { 
        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "dbname";
        $this->_dbh_conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $this->_dbh_conn->exec("set names utf8");
        $this->_dbh_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $this->_dbh_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    public function &dbh_conn() {
        return $this->_dbh_conn;
    }

    private function __clone() { }
    private function __wakeup() { }
}

当你包含这个文件时,你需要像这样获得连接:

$dbh_conn = DB::getInstance()->dbh_conn(); 

现在您已经连接到$dbh_conn 中的数据库,您可以像之前一样使用它。唯一的区别是现在您可以包含此文件,但它不会连接到数据库,除非您使用单例类DB 并专门请求数据库连接(就像我在上面的示例中所做的那样)。额外的好处是您在整个脚本运行时都获得了相同的数据库连接,因为您使用的是单例类的设计模式来获得连接。

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2014-01-14
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多