【问题标题】:LAMP settings – PHP and multiple DB connections with mysql_connect()LAMP 设置 - PHP 和多个数据库连接与 mysql_connect()
【发布时间】:2011-02-15 14:47:48
【问题描述】:

我被指派维护史前 PHP 应用程序,该应用程序使用由 Joe Thong 编写的一些“phpDB”类,最后一次更新是在 1999 年。该应用程序连接到同一服务器上的两个不同数据库,从一个数据库中获取一些数据,另一个从第二个。

现在,mysql_connect 的限制是,它为新连接使用相同的连接资源。因此,如果我使用以下代码:

$db1 = new phpDB()->connect(/* db1data, database 'one' */);
$db2 = new phpDB()->connect(/* db2data, database 'one' */);
$data = $db1->query($somequery); 

编辑说明: new phbDB()->connect 只是设置一些内部值,并在没有 $new_link 参数的情况下执行标准 mysql_connect

现在的问题是,$query 运行在数据库二上,因为它已经重写了之前的连接。

这可以通过使用true 作为mysql_connect 中的第四个参数来解决。问题是,我宁愿在 12 岁的库中重写某些东西(因为纯粹担心它会如何在实时服务器上做出反应),而且它在没有第四个参数的情况下在实时服务器上也能工作。但是,我不是服务器专家,我无法在服务器配置中找到正确的指令来打开我的本地 MAMP 配置,以更接近于模拟实时环境。

谁能帮帮我?谢谢。

编辑:包装器本身:
phpDB.php - db 包装器 - http://scrp.at/wd
phpDB-mysql.php - mysql具体代码 - http://scrp.at/we

【问题讨论】:

  • 你的目标是什么?向应用程序添加新查询?既然你说你的两个数据库在同一台服务器上,也许一次调用mysql_connect()然后使用mysql_select_db()就足够了?
  • 我认为你有这个错误。你不应该做$db1->querymysql_connect() 向数据库连接返回一个 ID。从那里您可以运行mysql_query("SELECT...", $db1);,第二个参数指定数据库。还是我在这里遗漏了什么?
  • 我的目标是尽可能地重建这个应用程序运行的实时环境,而无需使用文件或史前数据库包装器重写每个数据库。
  • @Brad:我使用了标准的 PHP 代码,尽管我说应用程序使用的是非常旧的 DB 包装器。我编辑了代码,使其更接近它的功能。
  • @Adam,现在更有意义了……这些细节很重要。感谢您的纠正。

标签: php mysql lamp mysql-connect


【解决方案1】:

解决此问题的方法是修改 query 方法。

它内部的某个地方正在调用mysql_query()。您所要做的就是添加第二个参数,其中包括对包含 MySQL 连接引用的内部变量的引用。

这是猜测,因为您尚未发布任何代码,但我认为您会看到如下内容:

function query($thequery) {
    mysql_query($thequery);
    ....
}

改成这个

function query($thequery) {
    mysql_query($thequery, $this->dbreference);
    ....
}

无论你在课堂上调用什么“dbreference”,我都不知道。查找调用mysql_connect 时设置的任何变量。

【讨论】:

  • 它被称为 $this->_referenceID 并且被多次重复使用。
【解决方案2】:

查看以下页面:

http://nl.php.net/manual/en/function.mysql-connect.php

http://nl.php.net/manual/en/function.mysql-query.php

通过填写 new_link 参数,您可以添加一个新的连接。

例如:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password', 'link1');
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password', 'link2');

mysql_query($query, 'link1'); //query on database 1
mysql_query($query, 'link2'); //query on database 2

【讨论】:

  • 我知道这种可能性,问题是,mysql_connect 被包装在 12 年的开源数据库类中,我只是害怕我会破坏一些东西。
  • 我想你会没事的。我自己用这个。它还没有被弃用:-)
  • 我并不害怕参数本身,而是它对允许某些东西的旧包装器和服务器配置的作用,这是不可能的(即在没有 $new_link 数据的情况下连接到多个数据库) .
  • "scared" .. 它只是一个小代码,制作文件的备份并编辑,如果你搞砸了,只需再次覆盖它,一切都很好。别再当婴儿了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2011-09-23
  • 2016-04-30
  • 2017-11-14
  • 2019-06-30
  • 1970-01-01
相关资源
最近更新 更多