2009-06-18 71 views
0

我似乎在这个问题上来回回顾,有时它适用于我,往往不适用,而且我无法弄清楚为什么有时我可以使用它以及在其他时间它不会。更改连接的数据库

我有5个数据库,并且需要在维护例程中从他们每个人那里获取数据。 对于每个数据库,我有一个外部文件,其中包含我在页面中包含的所有数据库连接代码。

的包括这个样子

 
$SGcon = mysql_connect("localhost","root",""); 

if (!$SGcon) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("sGopen", $SGcon); 

对于每个数据库我提供了一个不同的varaible,所以接下来的数据库将

 
$PTcon = mysql_connect("localhost","root",""); 

if (!$PTcon) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("pTsecond", $PTcon); 

然后当我打电话给我询问,我用

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

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

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

数据库之间有很多来回的数据,因为我将数据从一个数据库与另一个数据库进行比较,所以我试图对此有效。

感谢 皮特

回答

1

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

传递new_link=true将避免这种行为,虽然数据库连接可以是昂贵的,所以你应该尽量保持少开在合理的范围。

为new_link详细的说明:

如果再次调用 mysql_connect()由具有相同 论点,没有新的链接将被 建立,而是已经打开的链接 标识符链接 将被退回。该new_link 参数改变此行为 使得mysql_connect()总是打开一个新的 链接,即使mysql_connect()是 具有相同 参数之前调用。在SQL安全模式下,这个 参数被忽略。

1

我觉得如果你关闭每个查询之间,将解决问题的数据库连接。

如果你做了很多的数据库之间进行比较的话,我只想用1条select语句一次查询所有的数据库。

+0

这不是一个非常好或高性能的方法。如果您出于任何原因在查询中交错数据库源,则这可能不实用。 – cletus 2009-06-18 22:30:58

+0

我认为这个问题是由于缓存。无论如何,不​​用数据库时打开数据库也不表现。 – Sev 2009-06-18 22:39:42

1

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