kostenloser Webspace werbefrei: lima-city


Zwei MySQL Datenbanken gleichzeitig verwenden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mmc

    mmc hat kostenlosen Webspace.

    Hallo,
    ich möchte zwei mysql-datenbanken gleichzeitig verwenden, um auf die daten über php zugreifen zu können.
    Folgender Code für die Datenbankverbindung:
    <?php
    $link = mysql_connect ('localhost','ODBC','') or die(mysql_error()); 
    $result = mysql_select_db ('ventildb') or die(mysql_error()); 
    ?>

    Jezt möchte ich mic noch in der gleichen datei mit der Datenbank "artikeldb" verbinden.
    Wie geht das, dass alle beide gleichzeitig zur Verfügung stehen?

    mfg
    mmc
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. <?php
    $link2db1 = mysql_connect ('localhost','ODBC','', true) or die(mysql_error()); 
    mysql_select_db ('ventildb', $link2db1) or die(mysql_error());
    $link2db2 = mysql_connect ('localhost','ODBC','', true) or die(mysql_error()); 
    mysql_select_db ('ventildb', $link2db2) or die(mysql_error()); 
    ?>

    Du musst jetzt aber bei allen mysql_querys, usw. ein $link2db1 / $links2db2 übergeben.
  4. Einfach jeweils bei der Abfrage noch die richtige Verbindung anhängen:
    $result = mysql_query("SELECT * FROM `test`", $connect1);
    ||
    $result = mysql_query("SELECT * FROM `test`", $connect2);


    $connect1 und $connect2 sind einfach deine zwei Verbindungen...

    Beitrag zuletzt geändert: 3.2.2010 21:10:28 von buechsdeluxe
  5. Autor dieses Themas

    mmc

    mmc hat kostenlosen Webspace.

    könnte man das umgehen, wenn man die zweite verbindung mit einer seperaten datei eröffnet, da ich sonst ziemlich viele seiten umändern müsste
  6. Eine andere Datei hilft in diesem fall wenig du brauchst einen eigenen Prozess/Thread den kann man in PHP aber nicht erzeugen glaub ich selbst wenn wäre es keine gute idee mit neuen Threads oder gar Prozessen müsstest dann syncronisieren.
    Schreib dir doch eine Funktion oder Klasse der du dann angeben kannst welche DB verwendet werden soll den rest kann diese Kapseln dann ist der mehraufwand auch geringer und es ist besser wartbar!


  7. Dann verrat ich mal ein Geheimnis: Wenn du bei mysql_query und anderen MySQL Funktionen keinen Link-Identifier übergibst, wird die zuletz geöffnete Verbindung genutzt:

    <?php
    $LINK_ZU_DEINER_BESONDEREN_DB = mysql_connect ('localhost','ODBC','', true) or die(mysql_error()); 
    mysql_select_db ('ventildb', $LINK_ZU_DEINER_BESONDEREN_DB) or die(mysql_error());
    $LINK_ZUR_STDDB = mysql_connect ('localhost','ODBC','', true) or die(mysql_error()); 
    mysql_select_db ('ventildb', $LINK_ZUR_STDDB) or die(mysql_error()); 
    ?>


    Wenn du jetzt nichts als letzten Parameter übergibst wird $LINK_ZUR_STDDB genutzt. Wenn du die andere DB nutzen willst, musst du $LINK_ZU_DEINER_BESONDEREN_DB übergeben.

    Ich hoffe es stimmt was ich sage, alle Angaben ohne Gewähr :D
  8. @mmc
    zwei mysql-datenbanken gleichzeitig verwenden ...
    kein problem.

    @nikic
    Du musst jetzt aber bei allen mysql_querys, usw. ein $link2db1 / $links2db2 übergeben.
    falsch. du machst ein 'connect' nicht zu der datenbank, sondern zum server.

    @buechsdeluxe
    Einfach jeweils bei der Abfrage noch die richtige Verbindung anhängen
    falsch. siehe nikic vorher.

    @plato
    ... du brauchst einen eigenen Prozess/Thread den kann man in PHP aber nicht erzeugen ...
    2 x falsch. er brauch keinen thred und ja den kann man mit php erzeugen. (halber punkt für dich: nicht bei lima-city!)

    @nikic
    ... Ich hoffe es stimmt was ich sage, alle Angaben ohne Gewähr :D
    gott erbarme unser :o)

    na dann mal kurz, wie es geht:
    1. zuerst die consolenvariante:
    server connecten:
    czibi@bBox:~$ mysql -h mysql.lima-city.de -u <username> -p
    Enter password:
    (jede gibt statt <username> den eigenen ein :o)
    die antwort des servers:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1610141
    Server version: 5.0.51a-24+lenny2+spu1 (Debian)
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    da sieht man: connection id is 1610141 (die nummer kann natürlich anders lauten), was mit dem server und nicht mit der datenbanken zu tun hat!

    ab sofort können nicht nur ein o. zwei, sondern beliebig viele datenbanken (auch) gleichzeitig abgefragt werden. die technik steckt in der query selbt und hier gleich ein beispiel:
    mysql> select u.name db1_username, r.name db2_rolename
        -> from <mydb_1>.user u, <mydb_2>.role r
        -> where u.role_ID=r.ID and
        ->       r.name='Administrator';
    +--------------+---------------+
    | db1_username | db2_rolename  |
    +--------------+---------------+
    | user1        | Administrator | 
    +--------------+---------------+
    1 row in set (0.03 sec)
    '<mydb_1>' und '<mydb_2>' müsen wieder mit echten namen bestückt werden!
    2. und das ganze geht natürlich auch mit php. da ist ein demo-prog von mir, wo der source auch ausgegeben wird. eine beschreibung bleibt hier aus, weil sie ohnehin bei der mysql-doc mit dabei ist. ich habe es lesende weise dort gefunden ;o)

    no dann schlaft alle gut!

    ps.: und genau aus dem selben grund wähle ich nie eine datenbank aus ('use <db>;').
    das was ihr diskuttiert habt braucht man, wenn man von mehreren servern aus mehreren datenbanken mehre tabellen abfragt. für ungläubige - und wie das geht!

    Beitrag zuletzt geändert: 5.2.2010 1:35:52 von czibere
  9. @czibere: Bitte, lese zuerst die mysql_-Dokumentation bevor du mir oder anderen unterstellst etwas falsches gesagt zu haben. Das was du sagst ist natürlich möglich. Jedoch möchte er ja gerade so wenig wie möglich Code neu schreiben. Bei deiner Variante wäre aber sehr viel Code umzeuschreiben, der gesamte Code.

    Wenn du jetzt wirklich in die mysql_-Dokumentation gesehen hättest, wüsstest du, wer hier richtig liegt. Beachte bitte, dass ich als vierten Parameter bei mysql_connect ein true übergeben habt. Dieses true dient dazu eine neue Datenbankverbindung anzulegen. Hätte ich dieses true weggelassen, lägst du richtig.

    Also, bitte, ich habe echt nichts dagegen, wenn man mich zurechtweist. Aber ich habe etwas dagegen, wenn man mir stur sagt, es sei falsch, insbesondere, wenn es nicht so ist.
  10. @nikic
    @czibere: Bitte, lese zuerst die mysql_-Dokumentation bevor du mir oder anderen unterstellst etwas falsches gesagt zu haben.
    das tue ich regelmässeig (eigentlich dauernd) und ich will natürlich niemandem auf die zehen treten! aber ...

    ausgangsfrage von mmc:
    ich möchte zwei mysql-datenbanken gleichzeitig verwenden
    .
    zu deiner letzten bahauptung in punkto true (de.php.net):
    Für den Fall, dass ein zweiter Aufruf von mysql_connect() mit den gleichen Argumenten erfolgt, wird keine neue Verbindung aufgebaut, sondern die Verbindungs-Kennung der schon bestehenden Verbindung zurückgeliefert. Der Parameter neue_Verbindung beeinflusst dieses Verhalten und mysql_connect() öffnet immer eine neue Verbindung, sogar dann, wenn mysql_connect() zu einem früheren Zeitpunkt mit den gleichen Parametern aufgerufen wurde.
    da brauche ich deine hilfe, weil ich keinen zusammenhang zu der ausgangsfrage von mmc sehe! wozu bitteschön brauchst du eine neue kennung? um resourcen zu verpulvern?

    jetzt möchte man bitte nochmals alle postings durchlesen und die funktionierenden vorschläge zusammenzählen.

    @nikic nochmals: du hast meine posting nur bis dorthin durchgelesen, wo du dich dann beleidigt gefühlt hast. ich beleidige aber niemanden, was ich geschrieben habe ist trokkene technik. dass man zu viel ändern muss um meinen code anzuwenden kannst du genauso wenig wissen wie ich (wir alle kennen keine einzige zeile von ihm). mein code ist allerdings verdammt kurz (glaube ich zumindest)

    Beitrag zuletzt geändert: 5.2.2010 13:43:39 von czibere
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!