Auswahl der richtigen DB

Godstyle

Erfahrenes Mitglied
Hi Leute,

Ich habe ein kleines Problem, ich habe 3 Datenbanken ( wirklich 3 Datenbanken und nicht Tabelln in der DB ).

Jetzt habe ich eine Seite, die auf 2 der Datenbanken zugreift, jedoch haben diese beiden Datenbanken auch beide eine Tabelle, die user_login heißt.

Wie kann ich festlegen bei Update, in welcher Datenbank er etwas ändern soll?

Beide verbindungsdaten der DB's werden via include eingelesen und werden auch gebraucht.

Bisher habe ich es noch so gemacht das ich es geincludet habe, dann die anweisung, danach mysql_close(), und dann die zugangsdaten der nächsten geincludet.

Nur gibt es da nicht eine bessere Lösung, wie ich bereits beim SELEC, UPDATE oder INSERT die DB mit angeben kann auf die ich mich beziehe?

lg
 
Probielrs mal mit mehreren aktiven Verbindungen - auch wenns die gleichen Daten für den mysql_connect() sind. Müsste mMn gehen.
PHP:
$con1 = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db('db_1', $con1 );

$con2 = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db('db_2', $con2 );

$sql = 'UPDATE mytable SET state=1;';
//Ausführen auf der 2teh DB:
mysql_query($sql, $con2 );

Nachtrag:
Sollte aber eigentlich auch direkt im SELECT gehen. Einfach die DB davorhängen
SQL:
SELECT
    *
FROM
    db_2.table_a;

Die erste lösung ist dann gut, wenn du die gleichen SQLs auf verschiedene DBs abfeurn willst, die 2te dann wenn immer klar ist welche DB gemeint ist
 
Zuletzt bearbeitet von einem Moderator:
Du definierst einfach 3 mal Deine Logindaten und die dazugehörigen Handler:
PHP:
      $server1  ="localhost";  
      $user1    ="user1"; 
      $pass1   ="pass1";  
      $dbase1   ="datenbank1"; 

      $server2  ="localhost";  
      $user2    ="user2"; 
      $pass2   ="pass2";  
      $dbase2   ="datenbank2"; 

      $server3  ="localhost";  
      $user3    ="user3"; 
      $pass3   ="pass3";  
      $dbase3   ="datenbank3"; 


$conn1 = @mysql_connect($server1,$user1,$pass1);
if($conn){
    mysql_select_db($dbase1, $conn1);
/*    echo "DB geoffnet: ",$conn1 ;  */
         }
else {
    die("<b>Verbindung zum Server konnte nicht hergestellt werden.</b>");
    }

$conn2 = @mysql_connect($server2,$user2,$pass2);
if($conn){
    mysql_select_db($dbase2, $conn2);
/*    echo "DB geoffnet: ",$conn2 ;  */
         }
else {
    die("<b>Verbindung zum Server konnte nicht hergestellt werden.</b>");
    }

// ..genauso mit DB3

Die einzelnen Datenbanken sprichts Du dann mit $conn1, $conn2 und $conn3 an
 
@ Fragenfrager, wie ich eine verbindung zu mehreren DBs herstelle war mir bereits bekannt und nicht bestandteil der Frage, ich kann dich auch falsch verstehen, dann nichts für ungut ;)

@Yaslaw, die 2te Lösung von Dir finde ich gut und sollte Mein Problem in den Griff bekommen, also die Namen der Tabellen sind immer bekannt

Nur mal dazu, warum ich das brauche, es soll Möglich sein, dass wenn man auf einer Seite angemeldet ist und zB seine e_mail ändert, diese auch direkt auf dem Partnerprojekt ändern kann.

Es muss also mehrfach die selbe abfrage für 2 Datenbanken erfolgen und das wollte ich in einem abwasch machen ohne die abfrage 2 mal, also je einmal für jede DB zu schreiben.

Daher denke ich Lösung 2 von Yaslaw erledigt das schon ideal.

Danke euch
 
Deine Situation ist aber eher für die erste Lösung. Denn dort ist im SQL nicht die DB-Connection drin. Somit kann dasselbe SQL gegen beide Datenbanken abgesetzt werden.
In der Lösung 2, wo vor jeder Tabelle die DB steht, muss dies jedesmal angepasst werden
PHP:
//Variante mit einem Connection-Array
$conns[1] = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db('db_1', $conns[1] );

$conns[2] = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db('db_2', $conns[2] );

$sql = 'UPDATE mytable SET state=1;';

//für jede DB ausführen
foreach($conns as $conn{
    mysql_query($sql, $conn);  
}
 
Also ich habe es so gemacht:

PHP:
# db umbenannt
$aendern = "UPDATE db1.user_login , db2.user_login
				Set 
				e_mail_n = '".$new_mail."',
				ip_change = '".$ip."'
				WHERE e_mail = '".$u_mail."'";

wenn ich db1. und db2. weglasse, dann bekomme ich eine Fehlermeldung, das er durch eine doppelte belegung nicht zuordnen kann was geändert werden soll.

Sry habs grade nicht im Originalen, aber könnte den Fehler Produzieren.

EDIT: Also es funktioniert, das Problem ist gelöst, nicht das jmd denkt ich habe da noch das Problem
 
Du könntest die DB-Namen noch als Variablen definieren in einer zentralen Config-File. Dann hast du, bei einem möglichen DB-Umzug, dahingehend keine (großen) Probleme.
Ansonsten ist das die einfachste Lösung.

@Yaslaw: Ich hätte es ebenfalls wie Godstyle gelöst und einfach zwei UPDATES ausgeführt, anstatt das Ganze über zwei Verbindungen zu regeln. Das hat einen höheren Rechenaufwand, mMn.
 
Zurück