【问题标题】:Using database class in multiple PHP scripts在多个 PHP 脚本中使用数据库类
【发布时间】:2019-01-15 07:21:20
【问题描述】:

我使用 DB 类(带有 PDO)来访问 MySQL 服务器,我对此有疑问。

我的项目结构如下所示: Project structure

我的问题是我需要在每个脚本中创建和关闭 DB 对象或有其他解决方案来解决这个问题?在这些情况下的习惯是什么?我可以以某种方式概括下面的代码 sn-p 吗?

现在在受影响的页面中看起来像这样:

try
{
    $db = new DB();
} catch (DBException $e)
{
    forwardToErrorPage($e->getMessage());
    return;
}

try
{
    if ($db->someDBFunction($args) == 0)
        header("Location: ../templates/success.php");
    else
        forwardToErrorPage('Adding person failed');
} catch (DBException $e)
{
    forwardToErrorPage($e->getMessage());
}
finally
{
    $db->close();
}

【问题讨论】:

标签: php database oop object try-catch


【解决方案1】:

您可以在所有文件的标题中包含require_once('/path/to/project/src/DB.php');,并在 DB.php 中创建您的数据库句柄:

try
{
    $db = new DB();
} catch (DBException $e)
{
    forwardToErrorPage($e->getMessage());
    return;
}

我建议使用像 Eloquent (reference) 这样的 ORM 更好的解决方案:

composer require illuminate/database

然后在您的 DB.php 文件中:

require_once "vendor/autoload.php";
use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
   "driver" => "mysql",
   "host" =>"127.0.0.1",
   "database" => "acl",
   "username" => "root",
   "password" => ""
]);

$capsule->setAsGlobal();
$capsule->bootEloquent();

【讨论】:

    【解决方案2】:

    每次如果你想使用你的数据库,你必须创建一个数据库连接。有很多库可以帮助您管理数据库,但如果您想要一个好的简单方法,请使用 Singleton

    另一个好方法是将您的数据库类更改为服务和dependency injection

    我不想在这里解释单例模式、DI 和服务,因为在互联网和 SO 上有很多关于这方面的说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多