AndreasN: + CGI Verbindung & Abfrage über 2 Datenbanken ?

Holla,

bisher brauchte ich immer nur eine Datenbank. Weil ich das immer Projektweise trennen konnte. Nun ist es an der zeit dass ich doch mal einige Abfragen über 2 Datenbanken brauche. Bisher brauchte ich nur die Verbindung aufbauen:

my $dbh = DBI->connect($data_base, $username, $password) || die "Keine Verbindung zum mySQL-Server: $DBI::errstr\n";

und mit der Abfrage starten.
Wie schauts es jetzt bei 2 verschiedenen Datenbanken aus ? Kann mir da jemand auf die Sprünge helfen ? Irgendwie weiss ich nicht wirklich wie ich da ansetzen muss damit bei der Abfrage unterschieden wird, in welcher DB man grad sucht.
Vielen Dank schon im voraus

MfG
AndreasN

--
Wer lesen kann ist klar im Vorteil
  1. Mach doch einfach noch ein zweites DB-handle auf...mit der gleichen Methode...

    Dann schickst Du Deine SQL-Abfragen einfach an die entsprechende DB...

    1. Holla,

      Erst mal Danke für die schnelle Antwort ;)
      Du meinst das so:

      my $dbh = DBI->connect($data_base, $username, $password) || die "Keine Verbindung zum mySQL-Server: $DBI::errstr\n";
      my $dbh = DBI->connect($cdb, $cusername, $cpassword) || die "Keine Verbindung zum mySQL-Server: $DBI::errstr\n";

      Wenn ich das so mache, bekomme ich nur Verbindung zu der Datenbank die als zweites genannt ist. Ansonsten bekomme ich die Fehlermeldung:
      DBD::mysql::st execute failed: Access denied for user: 'DB2@localhost' to database
      Das ist der Benutzername der 2. DB der versucht auf die erste DB zuzugreifen :-( ....
      MfG
      AndreasN

      --
      Wer lesen kann ist klar im Vorteil
      1. Wenn Du auch beide DB-Handles gleich nennst...dann überschreibst Du natürlich das erste durch das zweite.

        Nenn doch das erste $dbh und das zweite $dbh2 oder so!

        1. Holla,

          Also gibbet da keinen "Trick" oder so, dass ich nur ein mal connecten muss, und am Ende auch nur einen Disconnect bräuchte oder so ?

          Naja egal... Ich werds mald so testen.
          Vielen Dank für Deine schnellen Antworten ! :-) *verneig*

          MfG
          AndreasN

          --
          Wer lesen kann ist klar im Vorteil
  2. Holla,

    Da hab ich doch glatt noch was vergessen:
    Wenn ich jetzt 2 DB Handle nehmen muss , und meine Abfragen so aussehen würden :

    my $dbh = DBI->connect($data_base, $username, $password)....
    my $sth = $dbh->prepare(q{SELECT userid, name, postcode, ....
    my $rc = $sth->execute () .....
    my ($clubid, $name, $postcode, $city) = .....
    $sth->finish;     # DB Abfrage beenden

    my $dbh2 = DBI->connect($data_base, $username, $password)....
    my $sth = $dbh2->prepare(q{SELECT userid, name, postcode, ....
    my $rc = $sth->execute () .....
    my ($clubid, $name, $postcode, $city) = .....
    $sth->finish;     # DB Abfrage beenden

    Wie würde das ganze denn ausshene wenn ich eine Abfrage über  beide Tabellen machen würde ? Ich meine in der Zeile:
    my $sth = $dbh2->prepare.....
    müsste ja dann sowohl $dbh als auch $dbh2 stehen oder ?

    Vielen Dank noch mal.

    MfG
    AndreasN

    --
    Wer lesen kann ist klar im Vorteil
    1. ...ich würde mal behaupten, daß Du keine Abfragen über zwei Tabellen machen kannst, die in seperaten Datenbanken liegen!
      Jedenfalls nicht mit einem SQL-Statement...

      ..wenn das geht, wüßte ich es gern!

      Hol Dir das, was Du brauchst aus beiden Tabellen und schnipsel es Dir hinterher zurecht.

      In Deinem Fall kannst Du entweder an $dbh oder an $dbh2 abschicken...
      ...ansonsten sind das ja gleich 2 Dinge auf einmal, das geht nun wirklich nicht!

      1. Hallo»

        ...ich würde mal behaupten, daß Du keine Abfragen über zwei Tabellen machen kannst, die in seperaten Datenbanken liegen!
        Jedenfalls nicht mit einem SQL-Statement...

        Mit einem SQL-Statement geht das, lies bitte http://www.mysql.com/doc/de/SELECT.html

        <ausschnitt>
        Sie können auf eine Spalte als spalten_name verweisen, als tabelle.spalten_name oder als datenbank.tabelle.spalten_name.
        </ausschnitt>

        ..wenn das geht, wüßte ich es gern!

        also etwa

        select db1.tab1.feld1, db2.tab1.feld2
        from db1.tab1, db2.tab1
        where ...

        hier mit zwei gleichnamigen Tabellen in unterschiedlichen Datenbanken ...

        Wie das mit PHP geht, weiß ich leider ebenfalls nicht.

        Freundliche Grüsse,

        Vinzenz

        1. SUP !

          Also hatte ich doch irgendwo richtig in Erinnerung, dass ich da mal was gelesen hatte. Wusste nur nicht mehr wo und was.

          Danke Dir für die Info. Ich werde mich da jetzt mal genau einlesen ;)

          MfG
          AndreasN

          --
          Wer lesen kann ist klar im Vorteil
          1. Hallo Andreas,

            Also hatte ich doch irgendwo richtig in Erinnerung, dass ich da mal was gelesen hatte. Wusste nur nicht mehr wo und was.

            Du benötigst im übrigen nur ein Handle, wichtig ist nur, dass der gleiche Benutzer Zugriffsrechte auf beide Datenbanken besitzt.

            Denn mysql_connect http://www.php.net/manual/de/function.mysql-connect.php verbindet zum Datenbankserver und nicht zu einer bestimmten Datenbank.

            Danke Dir für die Info. Ich werde mich da jetzt mal genau einlesen ;)

            Das ist die richtige Einstellung :-)
            Viel Erfolg!

            Freundliche Grüsse,

            Vinzenz