+ CGI Verbindung & Abfrage über 2 Datenbanken ?
AndreasN
- datenbank
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
Mach doch einfach noch ein zweites DB-handle auf...mit der gleichen Methode...
Dann schickst Du Deine SQL-Abfragen einfach an die entsprechende DB...
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
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!
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
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
...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!
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
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
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