在index.php文件中写入数据库连接

在index.php文件中写入数据库连接,php,mysql,database,pdo,Php,Mysql,Database,Pdo,我有一个到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->setA

我有一个到
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
传递的,所以连接会执行。我的意思是,对于所有页面(即使是那些不需要数据库的页面),都有一个数据库连接

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

您需要为DB连接创建一个类,而不仅仅是运行代码

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,除非您使用Singleton类
DB
,并特别请求DB连接(正如我在上面的示例中所做的那样)。另外一个好处是,在脚本的整个运行期间,您都获得了相同的DB连接,因为您使用了singleton类的设计模式来获得连接。

将DB连接添加到新文件中,并将其包含在需要DB连接的任何页面中-如果详细信息发生更改或需要调整,可以节省大量编辑工作在所有页面上连接到数据库的连接方式使您更有可能遇到数据库的连接限制。您应该只在真正使用DB的页面上使用它。@Barmar拜托,我们所有的网站都是这样做的。达到极限的原因并不是所有页面的连接。@YourCommonSense那么你的观点到底是什么?所有页面的连接都可以吗?还是有问题?