在多个PHP脚本中使用数据库类

时间:2019-01-15 07:21:21

标签: php database oop object try-catch

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

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

我的问题是我需要在每个脚本中创建和关闭DB对象,或者需要针对此问题的另一种解决方案?在这些情况下的习惯是什么?我可以以某种方式归纳下面的代码片段吗?

现在在受影响的页面中如下所示:

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();
}

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:-1)

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

另一种好的方法是将db类更改为服务和dependency injection

我不想在这里解释Singleton模式,DI和服务,因为在Internet和SO上有很多说明。