我使用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();
}
答案 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上有很多说明。