【问题标题】:Changing the connected DB更改连接的数据库
【发布时间】:2010-11-04 04:05:29
【问题描述】:

我似乎在这个问题上来回反复,有时它对我有用,但通常它不起作用,我不知道我如何/为什么有时可以让它工作,而在其他时候它不会.

我有 5 个数据库,需要在例行维护期间从每个数据库中获取数据。 对于每个数据库,我都有一个外部文件,其中包含我在页面中包含的所有数据库连接代码。

包含看起来像这样

$SGcon = mysql_connect("localhost","root",""); 如果 (!$SGcon) { die('无法连接:' . mysql_error()); } mysql_select_db("sGopen", $SGcon);

我为每个数据库提供不同的变量,所以下一个数据库将是

$PTcon = mysql_connect("localhost","root",""); 如果 (!$PTcon) { die('无法连接:' . mysql_error()); } mysql_select_db("pTsecond", $PTcon);

然后当我调用我的查询时,我使用

mysql_query($getQuery, $PTcon); mysql_query($secondQuery, $SGcon);

我遇到的问题是我没有获得用于查询的正确数据库,看来我的脚本正在使用最后添加到页面的数据库。

我有没有更好的方法来切换要使用的数据库连接?

当我将一个数据库中的数据与另一个数据库中的数据进行比较时,数据库之间有很多来回,所以我也在努力提高效率。

谢谢 皮特

【问题讨论】:

    标签: php mysql database-connection


    【解决方案1】:

    默认情况下,如果您将相同的参数传递给mysql_connect,则它会返回一个缓存连接(如果可用),而不是创建一个新连接。因此,这两个查询都针对您上次传递给 mysql_select_db 的任何数据库运行。

    传递new_link=true 将避免这种行为,尽管数据库连接可能很昂贵,因此您应该尽可能少地保持打开状态。

    new_link的详细解释:

    如果第二次调用 mysql_connect() 同 论点,不会有新的链接 建立,但相反,链接 已打开链接的标识符 将被退回。新链接 参数修改此行为并 使mysql_connect() 总是打开一个 新链接,即使 mysql_connect() 是 之前用同样的方法调用过 参数。在 SQL 安全模式下,这 参数被忽略。

    【讨论】:

      【解决方案2】:

      我认为如果您在每个查询之间关闭数据库连接,您将解决问题。

      如果您在数据库之间进行大量比较,那么我将只使用 1 条 select 语句一次查询所有数据库。

      【讨论】:

      • 这不是一个非常好的或高性能的方法。如果您出于某种原因在查询中交错数据库源,这也可能不切实际。
      • 我认为问题出在缓存上。无论如何,在不使用时打开 DB 也不是很好。
      • 不幸的是,它不仅是查询,还有更新/插入,所以我认为这行不通。不过感谢您的反馈。
      • UPDATES 和 INSERTS 也是查询。
      • 非常真实的 Sev,不知道我为什么要考虑这两个不同的事情。
      【解决方案3】:

      除非有特定原因,否则您希望将数据库连接保持在尽可能低的水平。我将使用一个连接,并编写一种方法来扩展 mysql_query() 方法的功能。您可以将 SQL 字符串和表名传递给它,然后函数调用 mysql_select_db($tableName) 并重新使用相同的连接来处理 SQL。

      【讨论】:

      • 您可能是对的,我可以扩展 mysql_query 方法的功能,但我认为我的编程水平还不够高,无法做到这一点。你说 mysql_select_db($tableName),我假设你的意思是 $databaseName。但这不是和 new_link=true 一样的开销吗?我不太熟悉打开和关闭连接与更改数据库之间的区别。
      猜你喜欢
      • 2017-12-26
      • 2019-12-01
      • 2012-08-15
      • 2018-07-27
      • 2014-11-11
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多