【发布时间】:2020-03-15 03:00:11
【问题描述】:
我正在使用这样的数据库连接类...
class Dbh
{
private $host;
private $dbName;
private $password;
private $dbUser;
private $charset;
protected function connect ()
{
$this->host = 'localhost';
$this->dbName = 'test';
$this->password = '';
$this->dbUser = 'root';
$this->charset = 'utf8mb4';
try
{
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbName . ';charset=' . $this->charset;
$pdo = new PDO($dsn, $this->dbUser, $this->password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
}
catch (PDOException $exception)
{
$message = 'Connection failed:' . $exception->getMessage();
return $message;
}
}
}
...如果我回显try 例如echo 'Connected'; 并打电话给例如...
$user = new User();
$users = $user->getAllUsers();
$update = $user->updateUser();
$insert = $user->insertUsers();
它将在一个页面上输出 3 次“已连接”,它应该只输出一次,因为 1 个连接就足够了。
如何解决这个问题?
【问题讨论】:
-
User -
用户类只是一个简单的
$stmt = $this->connect()->query('SELECT * FROM users');以及我在索引页面上输出的用于测试目的的查询 -
所以你在每个查询上都调用
->connect()。从逻辑上讲,您将在每个查询上再次连接。我对这里的混乱感到困惑。 -
这可能是 singleton 设计模式的一个很好的用例 - phpenthusiast.com/blog/the-singleton-design-pattern-in-php
-
当然不是,不正常。您是否每次需要乘车时都购买新车?可能不是。为什么每次要运行查询时都有连接数据库的想法?接受的答案只是将问题扫到了地毯下。它不仅使用户成为数据库的后代(相当奇怪的祖先),而且还保持了每次需要运行查询时连接的习惯。鉴于您只是在学习并且没有要保留的遗留代码,因此接受的答案是故意伤害。