【问题标题】:php - disconnecting and connecting to multiple databasesphp - 断开连接并连接到多个数据库
【发布时间】:2010-03-25 05:57:35
【问题描述】:

我希望能够通过循环从当前数据库切换到多个数据库:

$query = mysql_query("SELECT * FROM `linkedin` ORDER BY id", $CON ) or die( mysql_error() );
if( mysql_num_rows( $query ) != 0 ) {
    $last_update = time() / 60;
    while( $rows = mysql_fetch_array( $query ) ) {
        $contacts_db = "NNJN_" . $rows['email'];
        // switch to the contacts db
        mysql_select_db( $contacts_db, $CON );
        $query = mysql_query("SELECT * FROM `linkedin` WHERE token = '" . TOKEN . "'", $CON ) or die( mysql_error() );
        if( mysql_num_rows( $query ) != 0 ) {
            mysql_query("UPDATE `linkedin` SET last_update = '{$last_update}' WHERE token = '" . TOKEN . "'", $CON ) or die( mysql_error() );   
        }else{
            mysql_query("INSERT INTO `linkedin` (email, token, username, online, away, last_update) VALUES ('" . EMAIL . "', '" . TOKEN . "', '" . USERNAME . "', 'true', 'false', '$last_update')", $CON ) or die( mysql_error() );
        }
    }
    mysql_free_result( $query );
}
// switch back to your own
mysql_select_db( USER_DB, $CON );

它确实插入和更新来自其他数据库的详细信息,但它也插入和编辑来自当前用户数据库的我不想要的数据。有什么想法吗?

【问题讨论】:

  • 哇,我只能想象这浪费了多少带宽......
  • 哇,多么有建设性和有用的评论。
  • 请重新命名您的问题。您不是在“断开和连接”多个数据库。您只是在更改架构。
  • 另外,您对每封电子邮件都有单独的数据库吗?哇。这真是糟糕的数据库建模。此外,如果有帮助,while() 语句中的 mysql_fetch_array() 调用将从周期 2 开始具有某种未定义的行为,因为它与以前的模式不同。您应该执行两个循环:在第一个循环中,您从主数据库中获取所有内容并将其存储在一个数组中,然后在第二个循环中处理它。
  • 不,不是每封电子邮件,只是将其称为参考。

标签: php mysql database disconnect


【解决方案1】:

永远不要使用 php mysql_select_db() 基金 - 因为您发现代码(和编码器)很快就会变得非常混乱。

在查询中明确声明数据库:

SELECT * FROM main_database.a_table....

UPDATE alternate_db.a_table SET...

REPLACE INTO third_db.a_table...

C.

【讨论】:

  • 这不是答案,因为我重新启动了 :-) 但这似乎是关于我所追求的有用信息,所以谢谢。
  • BTW - 查看代码,我认为这可以通过 DBMS 上的几个 SQL 语句完成(使用 database_name.table_name 构造),而无需将数据拉入 PHP / 使用循环。
【解决方案2】:

你可能有错误的数据库设计。

【讨论】:

    【解决方案3】:

    我看到的一个改进是您可以使用一个查询来复制或更新

    语法是这样的:

    INSERT INTO mytable (field_list.....) VALUES (values_list...) 
        ON DUPLICATE KEY 
    UPDATE field1 = val1 ...
    

    【讨论】:

      【解决方案4】:

      您在 while 循环期间重新分配了 $query。这会产生奇怪的结果。使用 $query2 进行循环内的查询

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 2014-04-28
        相关资源
        最近更新 更多