【发布时间】: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->query。mysql_connect()向数据库连接返回一个 ID。从那里您可以运行mysql_query("SELECT...", $db1);,第二个参数指定数据库。还是我在这里遗漏了什么? -
我的目标是尽可能地重建这个应用程序运行的实时环境,而无需使用文件或史前数据库包装器重写每个数据库。
-
@Brad:我使用了标准的 PHP 代码,尽管我说应用程序使用的是非常旧的 DB 包装器。我编辑了代码,使其更接近它的功能。
-
@Adam,现在更有意义了……这些细节很重要。感谢您的纠正。
标签: php mysql lamp mysql-connect