php类中的pdo连接位置
我现在正在使用PDO,我有很多类。 每次我使用一个类时,我并不总是使用它的数据库相关函数。有时我会一直使用一个类,直到最后我可能会对数据库做一些工作,比如将这个对象保存到DB 所以我现在正在做这样的事情:php类中的pdo连接位置,php,pdo,database-connection,Php,Pdo,Database Connection,我现在正在使用PDO,我有很多类。 每次我使用一个类时,我并不总是使用它的数据库相关函数。有时我会一直使用一个类,直到最后我可能会对数据库做一些工作,比如将这个对象保存到DB 所以我现在正在做这样的事情: class Something { protected $pdo; function connect() { $this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbn
class Something
{
protected $pdo;
function connect()
{
$this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/* lots of functions doing lots of non-DB things */
function saveToDB()
{ $this->connect();
$this->pdo->prepare("Some SQL that saves some stuff");
// now do some DB-related pdo work
}
}
我的问题是——这合理吗?这是你们很多人编写代码的方式吗
在我看来,有3种选择:
class Something
{
protected $pdo;
function connect()
{
$this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/* lots of functions doing lots of non-DB things */
function saveToDB()
{ $this->connect();
$this->pdo->prepare("Some SQL that saves some stuff");
// now do some DB-related pdo work
}
}
我在一个页面上有最多三个相关对象,有时我有,有时我不需要在一个页面上多次连接到DB。哪种设计更安全?您可以使用惰性方式
protected $pdo;
function connect()
{
if ($this->pdo === null)
{
$this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
}
检查。你可以用懒惰的方式
protected $pdo;
function connect()
{
if ($this->pdo === null)
{
$this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
}
选中。当您的对象定义为ex:
class foo{
public $conn;
function __construct($conn){
$this->conn = $conn;
}
function doSomething(){
}
}
现在,如果您发现自己不想实例化连接,无论何时
位于不需要数据库连接的页面/工作区,并且会显著降低页面速度。在尝试连接时,请使用PDO属性
ATT_PERSISTENT
属性,如:
$conn = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx',
array( PDO::ATTR_PERSISTENT => true )
);
$object = new foo($conn);
简单地说,一旦你打开一个页面,连接就建立了。
ATTR\u PERSISTENT
方法将存储该连接,就像会话工作一样,并将继续为你的页面提供信息,并在每次刷新页面或转到另一个页面时帮助你创建到数据库的新连接。试试看,它。。您将看到页面的加载速度有多快 定义对象时,应在类中使用DI来实例化连接,例如:
class foo{
public $conn;
function __construct($conn){
$this->conn = $conn;
}
function doSomething(){
}
}
现在,如果您发现自己不想实例化连接,无论何时
位于不需要数据库连接的页面/工作区,并且会显著降低页面速度。在尝试连接时,请使用PDO属性
ATT_PERSISTENT
属性,如:
$conn = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx',
array( PDO::ATTR_PERSISTENT => true )
);
$object = new foo($conn);
简单地说,一旦你打开一个页面,连接就建立了。
ATTR\u PERSISTENT
方法将存储该连接,就像会话工作一样,并将继续为你的页面提供信息,并在每次刷新页面或转到另一个页面时帮助你创建到数据库的新连接。试试看,它。。您将看到页面的加载速度有多快 什么是“DI”?我不完全明白你的意思。第二段代码何时使用?假设我在一个页面上实例化对象产品
。我将在页面上使用该对象很长一段时间,但最后我需要保存它,如下面的$product->save()
因此,如果我以$p=新产品开始页面$p->setVals(某些值)
,我应该在页面末尾做什么?我应该在什么时候用ATT_PERSISTENT
添加您的第二个代码?就ATTR_PERSISTENT
而言,您可以在任何地方添加它,不用担心。正如我所说的,它有点像会话,只需打开一次,它就会保持页面上的连接属性,一旦关闭页面,连接就会终止。现在,DI是依赖注入的缩写。你可以在谷歌上搜索,或者看看有没有什么想法。这是处理当今存在的连接的一种非常重要的方式“DI”是什么?我不完全明白你的意思。第二段代码何时使用?假设我在一个页面上实例化对象产品
。我将在页面上使用该对象很长一段时间,但最后我需要保存它,如下面的$product->save()
因此,如果我以$p=新产品开始页面$p->setVals(某些值)
,我应该在页面末尾做什么?我应该在什么时候用ATT_PERSISTENT
添加您的第二个代码?就ATTR_PERSISTENT
而言,您可以在任何地方添加它,不用担心。正如我所说的,它有点像会话,只需打开一次,它就会保持页面上的连接属性,一旦关闭页面,连接就会终止。现在,DI是依赖注入的缩写。你可以在谷歌上搜索,或者看看有没有什么想法。这是处理当今存在的连接的非常重要的方式