统一php文件中的数据库初始化

时间:2018-10-30 19:17:01

标签: php database pdo

我对PHP完全陌生。我正在创建一个网站。

在几页中,我从以下代码开始:

<?php

$dsn = "mysql:host=localhost;dbname=db;";
$options = [
  PDO::ATTR_EMULATE_PREPARES   => false,
  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
  $pdo = new PDO($dsn,'root','', $options);
} catch (Exception $e) {
   die('Erreur : ' . $e->getMessage());
}

   //rest of the php + html code here

我想在一个php文件中统一此代码,并在每个页面中调用$ pdo。但是我想以安全的方式做到这一点。谁能帮忙。

2 个答案:

答案 0 :(得分:1)

为此最好使用singleton。这样,您可以避免打开多个数据库连接:

<?php

class Database
{
    public static $pdo;

    public static function getPDO()
    {
        if (null === self::$pdo) {
            $dsn = "mysql:host=localhost;dbname=db;";
            $options = [
              PDO::ATTR_EMULATE_PREPARES   => false,
              PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
              PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            ];
            try {
              self::$pdo = new PDO($dsn,'root','', $options);
            } catch (Exception $e) {
               die('Erreur : ' . $e->getMessage());
            }
        }

        return self::$pdo;
    }

    //protected constructor
    protected function __construct()
    {
    }
}

然后使用

require_once('path/to/database.php'); //the file with Database class
$pdo = Database::getPDO();

当然,您需要在每个页面中包含此文件/类。 另外,对数据库凭据进行硬编码也不是一个好习惯。更好地从某些.envgetenv().ini文件中加载。

答案 1 :(得分:1)

将连接代码保存在文件中。我们称之为db_connect.php。然后,使用正确的路径将以下内容添加到需要数据库连接的每个文件中:

include('path/to/db_connect.php');

您还可以根据需要使用include_once()require()require_once()

相关问题