# php mysql 2 datenbanken verknüpfen und abfrage einer zelle



## devar (3. März 2011)

Folgendes Problem.
Ich habe zwei externe Datenbanken
DB1 kann ich nur auslesen.
DB2 kann gelesen und auch geschrieben werden.
wie kann ich ´die beiden datenbanken verknüpfen **** als wenn in db1 der username Mustermann und in der db2 der nickname Mustermann lautet.
Ziel ist das ich so  die weiteren erforderlichen zellen in db 2 eitragen kann und zum usernamen aus datenbank1 anzeigen lassen kann. Zum Bsp. usertext


```
<?php
 ///#####include db1
include ('pkinc/cfg/connectlinedb1.php');
$db_verbindung = mysql_connect($server, $user, $pass);
if ($db_verbindung) {
    $res = mysql_db_query("$dbname", "select * from $dbtab");
    $num = mysql_num_rows($res);
} else {
    echo "Verbindung fehlgeschlagen!";
}

###########
 ///#####include db2
include ('pkinc/cfg/connectlinedb2.php');
 ///####alle tabellen anfang #####/////
 /* Erstellt Connect zu Datenbank her */
$db_verbindung1 = mysql_connect($server1, $user1, $pass1, $bdname);
 if ($db_verbindung1) {

##########hier sollte die verknüpfung gemacht werden aber wie ********######
##########eventuell auch schon den abruf usertext das wäre cool######

##########

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Language" content="de">
<title>mitarbeiter</title>
<style type="text/css">
.Table {
  border: 4px outset #FF0000;
}
.Table_in {
  font-size: 12;
}
</style>
</head>
<body>
<div align="center">
<table width="100%" style="border: 6px outset #0000FF; " background="images/berater/sterne.jpg">

  <tr>
    <td class="Table_in" align="center" style="border: 3px groove #0000FF; " bordercolor="#FF0000" colspan="4">
        <h2>Unsere Berater</h2>
        </td>
  </tr>
<?php
while ($feld = mysql_fetch_array($res)) {
?>
  <tr>
    <td class="Table_in" align="center" height="20" width="97%" colspan="4">
        &nbsp;</td>
    </tr>
  <tr>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="100" width="12%" rowspan="2"><img src="images/berater/<?php echo htmlspecialchars($feld['name']); ?>.jpg" /><br><h2><?php echo htmlspecialchars($feld['name']); ?></h2></td>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="70" width="12%"><h3>Durchwahl</h3><br><h2><?php echo htmlspecialchars($feld['durchwahl']); ?></h2></td>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="100" width="25%" rowspan="2">letzte Anmeldung<?php echo htmlspecialchars($feld['letzte_anmeldung']); ?><br>letzte Abmeldung<?php echo htmlspecialchars($feld['letzte_abmeldung']); ?></td>
        <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="100" width="46%" rowspan="2">
                <b>Beratertext</b></td
    </tr>
  <tr>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="23" width="12%">Status<br><img src="images/berater/<?php echo htmlspecialchars($feld['telefon_status']); ?>.gif" /></td>
    </tr>
    <tr>
    <td class="Table_in" align="center" height="20" width="97%" colspan="4">
        &nbsp;</td>
    </tr>
    <tr>
    <td class="Table_in" height="40" align="center" width="97%" colspan="4">
        <img border="0" src="images/berater/yinyang.gif" height="98" width="75"</td>
  </tr>
<?php
}
?>
</table>
</div>
</body>

</html>
```


----------



## tombe (3. März 2011)

Da wirst du mit mysql_select_db immer wieder die entsprechende Datenbank auswählen müssen, wobei trotzdem nur einmal mysql_connect nötig ist.
Vorausgesetzt natürlich das beide Datenbanken auf dem gleichen Server liegen, aber davon gehe ich ja auch aus!


```
<?php
$server = "localhost";
$user = "root";
$pass = "";

$db_verbindung = mysql_connect($server, $user, $pass);

//Name der Datenbank 1 und der Tabelle 1 festlegen
$db1 = "datenbank1";
$tab1 = "tabelle1";
$con = mysql_select_db($db1, $db_verbindung);
$res = mysql_query("select * from $tab1");
$num = mysql_num_rows($res);
echo $num ."<br />";

//Name der Datenbank 2 und der Tabelle 2 festlegen
$db2 = "datenbank2";
$tab2 = "tabelle2";
$con = mysql_select_db($db2, $db_verbindung);
$res = mysql_query("select * from $tab2");
$num = mysql_num_rows($res);
echo $num ."<br />";

//mit den obigen Variablen erneut zu Datenbank  bzw. Tabelle 1
$con = mysql_select_db($db1, $db_verbindung);
$res = mysql_query("select * from $tab1");
$num = mysql_num_rows($res);
echo $num ."<br />";
?>
```


----------



## devar (3. März 2011)

Hallo danke dir für deine Antwort,
also Datenbanken liegen nicht auf dem gleichen Server.
mit der include hole ich die zugangsdaten der datenbank1 + 2.

wird mit deinem code die datenbank verknüpft so das ich dann zu jedem usernamen  auch die dazugehörigen zellen abrufen kann?


----------



## Yaslaw (3. März 2011)

@tombe
Nicht unbedingt. Bei den mysql_* Befehlen, welche die Connection direkt verwenden, kann eine Connection mitgegeben werden.
Somit musst du die Connections nicht vor jedem Befehl neu setzen.

```
<?php
	$server = "localhost";
	$user = "root";
	$pass = "";

	$db_verbindung = mysql_connect($server, $user, $pass);

	//Name der Datenbank 1 und der Tabelle 1 festlegen
	$db1 = "datenbank1";
	$tab1 = "tabelle1";
//YASLAW: Die Connection 1 eindeutig bennen
	$con1 = mysql_select_db($db1, $db_verbindung);
//YASLAW: die Connection 1 dem mysql_query mitgeben
	$res = mysql_query("select * from $tab1", $con1);
	$num = mysql_num_rows($res);
	echo $num ."<br />";

	//Name der Datenbank 2 und der Tabelle 2 festlegen
	$db2 = "datenbank2";
	$tab2 = "tabelle2";
//YASLAW: Die Connection 2 eindeutig bennen
	$con2 = mysql_select_db($db2, $db_verbindung);
//YASLAW: die Connection 2 dem mysql_query mitgeben
	$res = mysql_query("select * from $tab2", $con2);
	$num = mysql_num_rows($res);
	echo $num ."<br />";

	//mit den obigen Variablen erneut zu Datenbank  bzw. Tabelle 1
//YASLAW: die Connection 1 dem mysql_query mitgeben. $con1 ist immer noch gültig
	$res = mysql_query("select * from $tab1", $con1);
	$num = mysql_num_rows($res);
	echo $num ."<br />";
?>
```


----------



## devar (3. März 2011)

Danke auch dir für deine schneele Antwort.
also das Problem ist recht Simpel nur schwer zu erklären,  ich versuche es noch einmal
Datenbanken Db2 liegt bei 1&1 Db1 liegt bei meier&co
auf der  DB2 habe ich ein Cms system mit  Datenbank und userverwaltung (schreib und leserechte)
auf der DB1 habe ich auch einige meiner user eingestellt jedoch nur den Nicknamen zb.raphaela
auf der db1 in der spalte "name" 
auf der db2 in der Spalte "user_nick"
jetz möchte ich wenn ich einen neuen nutzer in die db1 in die spalte "name" eintrage das durch den abruf automatisch die daten aus der DB2 des user ausgelesen werden zum beispiel:  user_text, user_birth usw je nach bedarf. ich hoffe das ich nun einweing verständlicher erklärt habe

hier der code db1 aufruf bringt mir unten in dem html teil den gewünschten erfolg
der aufruf der db2 zeigt mir nur die rwo anzahl an als ausgabe = 4
weil 4 user angelegt sind


```
<?php
 ///#####include db1
include ('pkinc/cfg/connectlinedb1.php');
 /* Erstellt Connect zu Datenbank 1 her */
 /* $erver, $user, $pass, $dbname, $dbtab */
$db_verbindung = mysql_connect($server, $user, $pass);
if ($db_verbindung) {
    $con = mysql_select_db($dbname, $db_verbindung);
    $res = mysql_db_query("$dbname", "select * from $dbtab");
    $num = mysql_num_rows($res);
} else {
    echo "Verbindung fehlgeschlagen!";
}

 ///#####include db2
include ('pkinc/cfg/connectlinedb2.php');
 /* Erstellt Connect zu Datenbank 2 her */
 /* $server1, $user1, $pass1, $dbname1, $dbtab1 */
 $db_verbindung1 = mysql_connect($server1, $user1, $pass1);
 if ($db_verbindung1) {
 $con1 = mysql_select_db($dbname1, $db_verbindung1);
$res1 = mysql_query("select * from $dbtab1");
$num1 = mysql_num_rows($res1);

echo $num1 ."<br />";
 } else {
    echo "Verbindung fehlgeschlagen!";
}

 ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Language" content="de">
<title>mitarbeiter</title>
<style type="text/css">
.Table {
  border: 4px outset #FF0000;
}
.Table_in {
  font-size: 12;
}
</style>
</head>
<body>
<div align="center">
<table width="100%" style="border: 6px outset #0000FF; " background="images/berater/sterne.jpg">

  <tr>
    <td class="Table_in" align="center" style="border: 3px groove #0000FF; " bordercolor="#FF0000" colspan="4">
        <h2>Unsere Berater</h2>
        </td>
  </tr>
<?php
while ($feld = mysql_fetch_array($res)) {
?>
  <tr>
    <td class="Table_in" align="center" height="20" width="97%" colspan="4">
        &nbsp;</td>
    </tr>
  <tr>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="100" width="12%" rowspan="2"><img src="images/berater/<?php echo htmlspecialchars($feld['name']); ?>.jpg" /><br><h2><?php echo htmlspecialchars($feld['name']); ?></h2></td>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="70" width="12%"><h3>Durchwahl</h3><br><h2><?php echo htmlspecialchars($feld['durchwahl']); ?></h2></td>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="100" width="25%" rowspan="2">letzte Anmeldung<?php echo htmlspecialchars($feld['letzte_anmeldung']); ?><br>letzte Abmeldung<?php echo htmlspecialchars($feld['letzte_abmeldung']); ?></td>
        <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="100" width="46%" rowspan="2">
                <b>Beratertext</b></td
    </tr>
  <tr>
    <td class="Table_in" align="center" style="border: 3px outset #0000FF; " height="23" width="12%">Status<br><img src="images/berater/<?php echo htmlspecialchars($feld['telefon_status']); ?>.gif" /></td>
    </tr>
    <tr>
    <td class="Table_in" align="center" height="20" width="97%" colspan="4">
        &nbsp;</td>
    </tr>
    <tr>
    <td class="Table_in" height="40" align="center" width="97%" colspan="4">
        <img border="0" src="images/berater/yinyang.gif" height="98" width="75"</td>
  </tr>
<?php
}
?>
</table>
</div>
</body>

</html>
```


----------



## tombe (3. März 2011)

Da ist dann wieder das Problem das (normalerweise) Datenbanken keinen Zugriff von außen zulassen.

Du müsstest dann auf dem Server auf den die DB2 liegt ein Skript hinterlegen, welches die gewünschten Daten ausliest.

Dieses Skript bindest du dann in eine Seite ein welche auf dem anderen Server liegt und liest hiermit die Daten aus.

Aufruf des Skripts auf Server 1 erfolgt mit:


```
<?php include "http://www.server1.de/dateiname.php?user=der_username"; ?>
```

Das Skript selber enthält dann lediglich:


```
<?php
//Verbindung zur Datenbank
$user = mysql_real_ecape_string($_GET["user"]);
$sql = "SELECT * FROM tabelle WHERE user = '" .$user ."' LIMIT 1";
$rs = mysql_query($sql);
$var1 = mysql_result($rs, 0, "feld1");
$var2 = mysql_result($rs, 0, "feld2");
$var3 = mysql_result($rs, 0, "feld3");
?>
```

Die Variablen $var1, $var2, $var3, ... kannst du dann für die andere Datenbank verwenden.


----------



## devar (3. März 2011)

Danke für deine Antwort.
aber ich verstehe nicht genau **** ich komme nur auf dem server wo die db2 liegt auf den anderen komme ich nicht da ist eben nur die datenbank zum abrufen.  also abrufen kann ich beide datenbanken man sieht es unten im code und über einen kleinen adminzugang kann ich nur den neuen User anlegen in der db1 die daten die usätzlich geladen werden sollen aus der db sollen dann ausgelesen durch eine datenbank verknüpfung die doch auch möglich sein sollte ohne Script oder **** also die verknüpfung von zwei datenbanken****?
Habe deine code gerade einmal versucht jedoch  Fehlermeldungen ohne ende
kein wrapper gefunden irgendetwas mit suit usw
aber ich bin fast der überzeugung das es einen anderen weg gibt. hoffe ich 


oder kannst du vielleicht dein code etwas kommentieren



tombe hat gesagt.:


> Da ist dann wieder das Problem das (normalerweise) Datenbanken keinen Zugriff von außen zulassen.
> 
> Du müsstest dann auf dem Server auf den die DB2 liegt ein Skript hinterlegen, welches die gewünschten Daten ausliest.
> 
> ...


----------



## AlexanderW (15. Januar 2015)

Hallo,
ich bekomme evtl. bald ein ähnliches Problem.
mysql_connect ist ja eh nicht mehr aktuell. (Siehe http://php.net/manual/en/mysqlinfo.api.choosing.php)
Da dachte ich mir wenn ich einen Server per "ext/mysqli" und den anderen per "PDO_MySQL" anspreche....
Das sollte doch auf jeden Fall funktionieren, auch wenn ich derzeit keinen Grund sehe weshalb eine der beiden API es nicht auch alleine schaffen sollte.
Falls jemand etwas genaueres sagen bzw. schreiben kann.

Bye
  Alexander


----------

