【问题标题】:php db class with mysqli, which support multiple connections带有mysqli的php db类,支持多个连接
【发布时间】:2011-08-03 16:59:26
【问题描述】:

问题是我需要用 mysqli 编写一个 db 类,它应该支持到不同数据库的多个连接。 我知道多连接不好,但我别无选择。

如果有支持多连接的类的好例子吗?

您知道我开始编写课程时应该考虑的任何提示吗?就我而言,最佳做法是什么?

提前致谢,

【问题讨论】:

  • 为什么“多连接不好”?还有什么其他方法可以连接到两台以上的服务器或使用异步查询?
  • @Quasdunk 谢谢,我已经查看了这个主题以及我在 StackOverflow 上找到的其他主题。
  • @Mchi,因为我读过它并听说过几次最好将所有表放在一个数据库中,而不是将它们放在不同的数据库中
  • @user616822:这不是真的。当然,就单个应用程序而言,通常只有一个数据库是最好的。然而,有时您只需要处理位于不同服务器上的多个数据库(通常运行不同的数据库系统)。 Multiple connections is bad 也有不同的含义。在 PHP 应用程序中,您通常应该为每个使用的数据库创建一个连接,即不要在每次查询之前创建新连接 - 重用现有连接)

标签: php class connection mysqli


【解决方案1】:

首先想到的是一个容器类,它在其中存储 MySQLi 对象。 像这样的:

class MySQLiContainer extends SplObjectStorage{
  public function newConnection($host = null, $username = null, $passwd = null, $dbname = null, $port = null, $socket = null) {
    $mysqli = new mysqli($host, $username, $passwd, $dbname, $port, $socket);
    $this->attach($mysqli);
    return $mysqli;
  }
}

//usage

$mysqliContainer = new MySQLiContainer();

$c1 = $mysqliContainer->newConnection('localhost','root','root','localDatabase');
$c1->query('SELECT ....');

$c2 = $mysqliContainer->newConnection('mysql.remotehost.net','hackermom','bobbytables','schoolDatabase');

$name = 'Robert\'); DROP TABLE students;--';

$c2->multi_query("SELECT * FROM students WHERE name = '$name'");

如果不了解所需功能的更多信息,很难说这是否是个好主意;)

更多关于SplObjectStorage类的信息。

【讨论】:

  • @Mchi,非常感谢,我查看了您的代码。这很清楚。不确定到底需要什么功能。我目前正在阅读有关 mysqli 的信息。如果我有任何与此相关的问题,我会写在这里。
  • 您可能应该问一个更详细的新问题。如果没有,请记住您可以编辑您的问题。不要在 cmets 中添加任何新信息 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2011-03-29
相关资源
最近更新 更多