Verbindung zwischen zwei db´s mit Datenaustausch
Sen
- datenbank
****************************************
MySQL-Client-Version: 5.0.27
MySQL-Zeichensatz: UTF-8 Unicode (utf8)
PHP Version 4.4.8
****************************************
hi @ all.
ich würde gern eine Verbindung zu zwei Datenbanken herstellen um von der einen Daten aus zu lesen und in die andere übertragen zu können.
der Export / Import ist ausgeschlossen, da ich immerwieder neue einträge habe und diese damit dauerhaft abgerufen werden, da ich diese Daten für verschiedene Sachen benötige.
mein Problem ist, das es nicht funktioniert.
aber hier erstmal das, was ich jetzt versucht habe:
<?php
$db_host = "localhost";
$db_user = "a";
$db_pass = "......";
$db_db = "db1";
$dbh1=mysql_connect($db_host,$db_user,$db_pass) or die("Keine Verbindung zum MySQL-Server!");
mysql_select_db($db_db,$dbh1) or die("Verbindung zum MySQL-Server hergestellt aber kein Zugriff auf die Datenbank arbeitsauftraege!");
$db_host2 = "localhost";
$db_user2 = "b";
$db_pass2 = "......";
$db_db2 = "db2";
$dbh2=mysql_connect($db_host2,$db_user2,$db_pass2) or die("Keine Verbindung zum MySQL-Server!");
mysql_select_db($db_db2,$dbh2) or die("Verbindung zum MySQL-Server hergestellt aber kein Zugriff auf die Datenbank arbeitsauftraege!");
$eintrag = "INSERT INTO b
.forum\_user
(user\_actives
,usernames
,user\_passwords
) SELECT user\_active
,username
,user\_password
FROM a
.forum\_users
ORDER BY user_id ASC";
$eintragen = mysql_query($eintrag) OR die(mysql_error());
if($eintragen == true)
{
echo "Eintrag war erfolgreich";
}
else
{
echo "Fehler beim Speichern";
}
?>
ich hatte das aus einem Beitrag entnommen, da ich mich selbst nicht so recht damit aus kenne.
um der frage vorweg zu greifen.
ein User mit rechten kann nicht angelegt werden, es geht nur mit zwei Verbindungen.
ich danke schonmal für eure Hilfe,
Mfg Sen
echo $begrüßung;
MySQL-Client-Version: 5.0.27
Die Client-Version ist in den meisten Fällen uninteressant. Die Server-Version ist ausschlaggebend. Client- ist aber gleich Server-Version, wenn beide aus den selben Quellen kompiliert wurden.
MySQL-Zeichensatz: UTF-8 Unicode (utf8)
Wo hast du diese Angabe her? Bei Problemen zwischen Client und Server zählt die auf der Verbindung ausgehandelte Kodierung.
PHP Version 4.4.8
Vermutlich gibt es einen Grund, warum du eine abgekündigte Version verwendest.
ich würde gern eine Verbindung zu zwei Datenbanken herstellen um von der einen Daten aus zu lesen und in die andere übertragen zu können.
Vielleicht meintest du es nicht wörtlich, aber ich nehme es so: "_eine_ Verbindung zu _zwei_ Datenbanken". Das ist kein Problem, solange die zwei Datenbanken in einer Serverinstanz leben und sich mittels einer Benutzerkennung ansprechen lassen. Die Regeln, wie die Bezeichner gebildet werden, befinden sich im Handbuch-Kapitel Identifier Qualifiers.
$dbh1=mysql_connect($db_host,$db_user,$db_pass) or die("Keine Verbindung zum MySQL-Server!");
mysql_select_db($db_db,$dbh1) or die("Verbindung zum MySQL-Server hergestellt aber kein Zugriff auf die Datenbank arbeitsauftraege!");
or die(...); Denkst du auch über Selbstmord nach, wenn du feststellst, dass der Laden, in dem du gerade eben einkaufen wolltest, nicht geöffnet ist?
$db_host = "localhost";
$db_user = "a";
$db_db = "db1";
$db_host2 = "localhost";
$db_user2 = "b";
$db_db2 = "db2";
Ist es wirklich so, dass zwar der Server der selbe ist, aber zwei unterschiedliche Benutzerkennungen verwendet werden müssen? Dann benötigst du zwei Verbindungen und kannst die Daten nur über die eine abfragen und über die andere senden. Ein gemeinsames Statement ist in dem Fall nicht möglich.
ein User mit rechten kann nicht angelegt werden, es geht nur mit zwei Verbindungen.
OK. Dann betrachte beide als völlig selbständig ohne irgendwelche Beziehungen zueinander. Frag die Daten von der einen Verbindung ab und bilde ein INSERT-Statement für die andere.
echo "$verabschiedung $name";
hi @ all
wenn ich nun aber zwei Verbindungen her stelle, weil ich ja leider keine Userrechte vergeben kann, bekomme ich folgende Meldung:
Access denied for user '......'@'localhost' to database '.......'
ich nehme an, das mir damit gesagt wird, das der user von db1 keinen Zugriff auf db2 hat, da sie nicht auseinander gehalten werden können.
wäre eventuell jemand so nett und würde mir verdeutlichen wie ich es umsetzen kann, das der Login auf zwei dbs funktioniert und ich Daten abrufen wie auch einlesen lassen kann.
wie das mit einem Login ist hab ich schon getestet und das geht, aber bei zwei logins komm ich durcheinander.
es ergibt immer ein Access denied .....
habt ihr eventuell schonmal selbiges probiert und könnt mir eventuell zeigen wie ichs machen muß.
ich habe noch nicht so viel Erfahrung in der Sache, aber auch viele andere konnten mir nicht wirklich weiter helfen.
auch der Support von mir wusste da nicht weiter und hat mich hier zu euch hin verwiesen.
ich nehme an, wenn ihr mir hier nicht weiter helfen könnt das ich das ganze dann wohl sein lassen kann, da mir mitgeteilt wurde das die community sich hier sehr gut damit auskennt.
ich hoffe das ihr mir weiter helfen könnt und bedanke mich schonmal für eure Bemühungen,
Mfg Sen
echo $begrüßung;
wenn ich nun aber zwei Verbindungen her stelle, weil ich ja leider keine Userrechte vergeben kann, bekomme ich folgende Meldung:
Access denied for user '......'@'localhost' to database '.......'
ich nehme an, das mir damit gesagt wird, das der user von db1 keinen Zugriff auf db2 hat, da sie nicht auseinander gehalten werden können.
Die Vermutung stimmt, die Begründung nicht. Jeder Benutzerkennung können diverse Rechte für verschiedene, auch mehrere Datenbanken vergeben werden. (Eigentlich ist das Rechtesystem noch feiner konfigurierbar, aber das spielt hier keine Rolle.) Mit einer Benutzerkennung kannst du nur genau die ihr zugewiesenen Dinge tun. Auseinanderhalten kann MySQL die Datenbanken über das das Auswählen der selbigen (USE / mysql_select_db()) oder durch entsprechende Identifier Qualifiers.
wäre eventuell jemand so nett und würde mir verdeutlichen wie ich es umsetzen kann, das der Login auf zwei dbs funktioniert und ich Daten abrufen wie auch einlesen lassen kann.
Dann brauchst du eine Kennung, die auf beiden Datenbanken Rechte hat.
... weil ich ja leider keine Userrechte vergeben kann ...
Damit fällt diese Möglichkeit weg. Es sei denn, du kannst deinen Administrator dazu bringen, dir eine Kennung einzurichten, die auf beide Datenbanken zugreifen kann.
Ansonsten bleiben nur zwei Zugriffe, mit zwei Kennungen, wobei jede Kennung auf ihre Datenbank zugreift, und der Umweg über PHP, der über die eine Verbindung die Daten ausliest und sie über die andere wieder einfügt.
echo "$verabschiedung $name";
hi @ all.
ich glaub das ich mich etwas falsch ausgedrückt habe, sry.
ich habe schon zwei Verbindungen aufgebaut und aus der einen lese ich bereits die Daten aus.
ich habe jedoch noch nicht so recht verstanden wie ich die nun ausgelesenen Daten in die andere db bekomme.
also per INSERT das ist mir schon bewusst.
aber der weg bis dahin ist ja noch lang.
könntest du mir eventuell erklären wie ich die ausgelesenen Daten nun Abbspeicher bzw. Zwischenspeicher, damit ich diese dann wieder abrufen kann um sie in die andere db eintragen zu können.
ich habe dafür schon so einige Vorschläge gehört, aber irgendwie hat das immer nicht funktioniert oder ich glaube zumindest das es nicht funktioniert hat, da ich dann immer nur ein Resource id #. als Ergebnis drin hatte.
wäre nett wenn du mir das nochmal etwas näher erläutern würdest.
ich werde aber nochmal anfragen ob man das vielleicht doch einrichten lassen kann mit dem User, mal sehen obs was bringt.
Mfg Sen
echo $begrüßung;
ich habe schon zwei Verbindungen aufgebaut und aus der einen lese ich bereits die Daten aus.
[...] aber irgendwie hat das immer nicht funktioniert [...], da ich dann immer nur ein Resource id #. als Ergebnis drin hatte.
Das ist aber Wissen, das jedes PHP-Tutorial vermittelt.
In jedem Schleifendurchlauf hast du die Daten je nach Fetch-Funktion in einem Array oder Objekt vorliegen und kannst das INSERT-Statement zusammenbauen (mysql_real_escape_string() nicht vergessen!) und es mit mysql_query() über die zweite Verbindung absetzen.
ich habe jedoch noch nicht so recht verstanden wie ich die nun ausgelesenen Daten in die andere db bekomme.
Was die Tutorials aber gern unterschlagen ist der optionale Parameter der mysql-Funktionen (außer der _connect), der die zu verwendende Verbindung angibt. Bei einer ist das kein Problem, aber in deinem Fall musst du diesen Parameter versorgen.
ich werde aber nochmal anfragen ob man das vielleicht doch einrichten lassen kann mit dem User, mal sehen obs was bringt.
Zumindest kannst du dann über eine Verbindung ein einzelnes INSERT...SELECT...-Statement für jede Tabelle absetzen. Das ist nicht nur deutlich weniger aufwendig, sondern auch schneller, da die ganze Arbeit im MySQL-Server erledigt wird.
echo "$verabschiedung $name";
hi @ all.
ich habe jetzt nochmal so Testweise alles probiert, aber es nicht wirklich umsetzen können.
eventuell könnt ihr mir ja weiter helfen wenn ich euch etwas Einsicht gebe.
ich hoffe das das jetzt nicht zu viel wird und es ok ist das ich das so mache.
ich weiß halt einfach nicht, wie ich nun weiter vorgehen soll und durch das ganze hin und her raucht mir schon ganz schön der Kopf.
ich bin halt kein Profi in der Sache und die zeit um alles in einer Woche zu lernen hab ich leider nicht.
aber ich hänge dahinter, auch wenn es schleichend voran geht.
danke nochmal für deine Hilfe, ich weiß das echt zu schätzen.
// Zum Aufbau der Verbindung zur Datenbank
define ( 'MYSQL_HOST1', 'localhost' );
define ( 'MYSQL_BENUTZER1', '....' );
define ( 'MYSQL_KENNWORT1', '....' );
define ( 'MYSQL_DATENBANK1', '....' );
$db_link1 = mysql_connect (MYSQL_HOST1, MYSQL_BENUTZER1, MYSQL_KENNWORT1);
if ( $db_link1 )
{
echo 'Verbindung erfolgreich: <br>';
echo $db_link1;
}
else
{
die('keine Verbindung möglich: <br>' . mysql_error());
}
// Nutzen von Datenbank (Name ist hinterlegt in Konstante MYSQL_DATENBANK
$db_sel = mysql_select_db( MYSQL_DATENBANK1 )
or die("Auswahl der Datenbank fehlgeschlagen");
$auslesen = "Select * From test_users ORDER BY user_id ASC";
$db_erg = mysql_query( $auslesen );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>". $zeile['user_id'] . "</td>";
echo "<td>". $zeile['username'] . "</td>";
echo "<td>". $zeile['user_password'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_free_result( $db_erg );
mysql_close($db_link1 );
//mysql_close($db_link1 );
// Zum Aufbau der Verbindung zur Datenbank
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', '....' );
define ( 'MYSQL_KENNWORT', '....' );
define ( 'MYSQL_DATENBANK', '....' );
$db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( $db_link )
{
echo 'Verbindung erfolgreich: <br>';
echo $db_link;
}
else
{
die('keine Verbindung möglich: <br>' . mysql_error());
}
// Nutzen von Datenbank (Name ist hinterlegt in Konstante MYSQL_DATENBANK
$db_sel1 = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
mysql_close($db_link );
Mfg Sen
echo $begrüßung;
ich habe jetzt nochmal so Testweise alles probiert, aber es nicht wirklich umsetzen können.
eventuell könnt ihr mir ja weiter helfen wenn ich euch etwas Einsicht gebe.
Ich sehe nicht, dass du auf irgendeinen meiner Vorschläge eingegangen bist. So wird das nichts. Woran genau scheitert es denn? Am Verständnis? Erkläre ich unverständlich? Wenn ja, was?
Vielleicht hilft es dir, wenn du erst einmal auf Papier einen Ablaufplan erstellst, wie du vorgehen würdest, wenn du von Person A konkrete Daten in unbekannter Anzahl entgegennehmen sollst um sie Person B zum Aufbewahren zu übergeben.
Anschließend solltest du dir das PHP-Manual schnappen, die von dir verwendeten Funktionen nachlesen, und da besonders den Parameter beachten, mit der man diese Funktionen an eine konkrete vorher geöffnete Verbindung binden kann.
ich bin halt kein Profi in der Sache und die zeit um alles in einer Woche zu lernen hab ich leider nicht.
aber ich hänge dahinter, auch wenn es schleichend voran geht.
Das interessiert ja alles nicht wirklich. Wichtig für die Antwortenden und letzten Endes auch für die Lösung deines Problems ist, zu erkennen, dass du die gegebenen Hinweise zumindest zu verstehen versuchst, und mitteilst, woran es scheitert. Ansonsten geht die Motivation flöten, und das hört sich nicht besonders gut an.
echo "$verabschiedung $name";