Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Datenbankverbindung (zwei oder mehr)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Datenbankverbindung (zwei oder mehr)

    Hallo,

    bin grad am Versuchen auf einer Seite eine Verbindung zu zwei Datenbanken herzustellen und von denen gewisse Datensätze auszulesen.

    Hier mal das was ich zum Verbindungstest habe

    PHP-Code:
    $connect1 mysql_connect("localhost""root""");
    $connect2 mysql_connect("localhost""root""");

    mysql_select_db("datenbank_1"$connect1);
    mysql_select_db("datenbank_2"$connect2);
     
    $result_table1 mysql_query("SELECT * FROM `table_1`",$connect1);
    $row_table1 mysql_num_rows($result_table1);
     
    $result_table2 mysql_query("SELECT * FROM `table_2`",$connect2);
    $row_table2 mysql_num_rows($result_table2);
     
    echo 
    "In Datenbank 1 gibt es ".$row_table1." Einträge.<br>";
    echo 
    "in Datenbank 2 gibt es ".$row_table2." Einträge.<br>"
    Müsste doch eigentlich funktionieren? gibt mir aber nur das von der 2. Datenbank wieder.

    Find den Fehler einfach nicht. Kann wer helfen?

    Lg

    (ich weiß sind eigentlich Grundlagen)


  • #2
    Error-Reporting an? Wie ueblich or die(mysql_error()) benutzen!
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Code:
      Table 'dantenbank_1.table_1' doesn't exist
      Warning:  mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\ft\test.php on line 23
      1. die Datenbank und Tabelle existieren.
      2. ich denk das liegt am

      PHP-Code:
      mysql_select_db("datenbank_1"$connect1);
      mysql_select_db("datenbank_2"$connect2); 
      wenn ich das mysql_select_db direkt vor die abfrage mache, gehts.

      Kommentar


      • #4
        mysql_connect bekommt einen optionalen, vierten Parameter, ob es eine neue Verbindung aufbauen soll.

        Kommentar


        • #5
          Ich habe mir vor viel längerer Zeit eine Klasse geschrieben, die den Query, die Datenbank und die mögliche Fehlerzeile annimmt (und später im Auftreten verarbeitet und bspw. den fehlerhaften Query via Email schickt). Via mysql_pconnect ist es damit wunderbar möglich, sogar beliebig zwischen Datenbanken hin- und herzuspringen und nach belieben Daten zu sammeln. Grundidee dahinter war, dass irgendwann mal ein Cluster-Netzwerk damit arbeiten kann ...

          Sämtliche Zugangsdaten liegen mit logisch nachvollziehbarem Namen in einer Konfigurationsdatei (Server, Benutzer, Passwort). Diese Dinge sind als Arrays bereitgestellt, welches sich die Klasse dann einfach selbst aufbereitet.

          Ich habe jetzt mal Kommentare etc. aus dem Source entfernt, aber vielleicht verstehst Du es:
          PHP-Code:
          class mysqlconnection {
              
          /*
                  Kommunikationsklasse für unterschiedliche Datenbanken, die jeweils eigene
                  Zugangsberechtigungen haben bzw. benötigen (DB-Name/Benutzername/Passwort)
                  
                  * @author     -> SF, Public Projects
                  * @func        -> query, dickhead, error_report
              */
              
          function query($querystring$__ZUGANG=''$zeile=0){
                  global 
          $error;

                  if(
          count($mydb) > 0){
                      
          $con mysql_pconnect(__KONSTANTE_FUER_SERVERNAME__$__ZUGANG[2], $__ZUGANG[3]);
                      if (!(
          $con === false)) {
                          if(
          mysql_select_db($__ZUGANG[1], $con) === false) {
                              
          $toReport "Datenbank nicht anwählbar: " mysql_error() . "<br />Error: ... auf " __LINE__;
                              
          mysqlconnection::error_report($toReport);
                              die(
          "Datenbank nicht anwählbar!<br />");
                          } else 
          mysql_query(" SET NAMES 'utf8' "$con); // temp. Umstellungsphase von ISO-8859-1 auf utf8
                      
          } else mysqlconnection::dickhead();
                  } else {
                      
          $toReport "Datenbank nicht anwählbar: " mysql_error() . "<br />Error: ... auf " __LINE__;
                      
          mysqlconnection::error_report($toReport);
                  }
                  
                  
          // Verbindung hergestellt?
                  
          if(!isset($con) || $con === false){
                      
          mysqlconnection::dickhead();
                  } else {
                      
          $res mysql_query($querystring$con);
                      if(!
          $res){
                          
          // Ergebnismenge unbrauchbar/nicht verfügbar, Fehler schreiben und Übergabe an Handler ...
                          
          $toReport $querystring "\n\nDatabase Error: ".mysql_errno()." | ".mysql_error()."\n\n... Ausführungsdatei: " $_SERVER['PHP_SELF'] . "\n... Ausführungszeile: " $zeile;
                          
          mysqlconnection::error_report($toReport);
                      } else return 
          $res;
                  }
              }
              
              function 
          dickhead(){
                  die(
          "Ich mag Tiere - mit Spätzle und Soße!");
              }
              
              function 
          error_report($toReport=""){
                  global 
          $error;
                  
          $strout ""$meldung "";
                  for(
          $i=0$i<count($error); $i++) $strout .= ( strlen($error[$i]) > ) ? $error[$i] . "\n" "";
                  
          $meldung $toReport "\nWeitere Hinweise:\n" $strout;
                  if(
          strlen($meldung) > 0){
                      
          // ... schicke Email ...
                      
          $error = array();
                  }
                  return;
              }

          Wie funktioniert's? Zunächst musst Du irgendwo die Zugangsdaten abgelegt haben für die unterschiedlichen Server ... ich nenne die hier jetzt mal $__SERVER1 und $__SERVER2. Beides sind Arrays mit folgendem Aufbau: array("localhost", "Datenbankname", "User", "Passwort");

          Die Klasse muss natürlich in allen Seiten require'd werden, wo Datenbank-Aktionen laufen.

          Na, schon klarer? So würde es dann laufen ...

          PHP-Code:
          $error = array();
          $Connection = new mysqlconnection;
          $rs $Connection->query(" SELECT ... "$__SERVER1__LINE__);
          if(
          $rs){
            
          // ... ole ole 
            
          mysql_free_result($rs);

          So sind Schleifen über mehrere Datenbanken möglich, da nur die $__SERVER-Info getauscht werden muss.

          __LINE__ steht mit drin, damit das Error-Script meldet, wo (!) der falsche Query angesetzt wurde (in Kombination mit PHP_SELF) - der User bekommt davon nichts mit.

          $error ist meine "global" für alle anlaufenden Fehler. Eine hier nicht gezeigte Funktion innerhalb der Klasse bereitet diese auf und verschickt mögliche Probleme ebenfalls per Email usw.

          Wenn Du also bspw. User von SERVER1 und SERVER2 haben willst (in einem Array bspw.), so geht das wie folgt ...

          PHP-Code:
          $error = array();
          $Connection = new mysqlconnection;
          $user = array();
          $rs $Connection->query(" SELECT ... "$__SERVER1__LINE__);
          if(
          $rs){
            while(
          $row mysql_fetch_assoc($rs)) $user[] = $row['username'];
            @ 
          mysql_free_result($rs);
          }
          $rs $Connection->query(" SELECT ... "$__SERVER2__LINE__);
          if(
          $rs){
            while(
          $row mysql_fetch_assoc($rs)) $user[] = $row['username'];
            @ 
          mysql_free_result($rs);

          ... oder eben mit Schleife ... und wenn der SELECT auf beiden Maschinen identisch ist, kann man auch den Query in eine Variable setzen.

          Das ist meine ganz persönliche Lösung für die Kommunikation mit 17 (!) verschiedenen Datenbanken. Zeitprobleme? Absolut nicht, da mysql_pconnect die bestehende Verbindung nutzt. Da es in Deinem Fall eh "localhost" ist, wirst Du gar nichts merken ...

          Der eine oder andere Forumleser wird hier jetzt bestimmt sagen, "boah, wie umständlich" oder auch "schlecht" - kann ich mit leben. Aber diese Lösung ist "wiederverwendbar", "übersichtlich", "ausbaufähig" u. v. m.

          Schönen Abend.
          Manche Menschen sind wie Schnitzel - nicht zäh, aber beidseitig bekloppt!

          Kommentar


          • #6
            Zitat von Curanai Beitrag anzeigen
            Ich habe jetzt mal Kommentare etc. aus dem Source entfernt
            Sehr sinnvoll, wenn man Code für andere bereitstellt...

            Zitat von Curanai Beitrag anzeigen
            PHP-Code:
            function query($querystring$__ZUGANG=''$zeile=0){ 
            AUA!
            Mal abgesehen von den grausigen Variablennamen, die zudem nicht gerade von einer Konvention zeugen (und du arbeitest mit Clustern?), definiert man $__ZUGANG nicht per Default als String wenn man es eigentlich als Array verwendet.

            Zitat von Curanai Beitrag anzeigen
            PHP-Code:
                        mysqlconnection::dickhead();
             
                function 
            dickhead(){
                    die(
            "Ich mag Tiere - mit Spätzle und Soße!");
                } 
            Sowohl Funktionsname (siehe leo.org) als auch Kommentar sind doch für jede Art von Code vollkommen daneben.
            Sonderlich hilfreich ist die Funktion überdies auch nicht, vielleicht solltest du lieber den Grund ausgeben, warum keine Verbindung hergestellt wurde.

            Zitat von Curanai Beitrag anzeigen
            Wie funktioniert's? Zunächst musst Du irgendwo die Zugangsdaten abgelegt haben für die unterschiedlichen Server ... ich nenne die hier jetzt mal $__SERVER1 und $__SERVER2. Beides sind Arrays mit folgendem Aufbau: array("localhost", "Datenbankname", "User", "Passwort");

            Die Klasse muss natürlich in allen Seiten require'd werden, wo Datenbank-Aktionen laufen.
            Wuaaaaaaa........
            Jetzt lauf ich wirklich schreiend davon.

            Im Vorbeirennen kann ich mir aber zwei letzte Kommentare nicht verkneifen:
            Zitat von Curanai Beitrag anzeigen
            Das ist meine ganz persönliche Lösung für die Kommunikation mit 17 (!) verschiedenen Datenbanken.
            Am liebsten würde ich den PHP- und Datenbankschutzverein anrufen...auch Software braucht eine Lobby!

            Zitat von Curanai Beitrag anzeigen
            Der eine oder andere Forumleser wird hier jetzt bestimmt sagen, "boah, wie umständlich" oder auch "schlecht" - kann ich mit leben. Aber diese Lösung ist "wiederverwendbar", "übersichtlich", "ausbaufähig" u. v. m.
            Die Lösung ist genau zwei Dinge: einstampfbar und neubaufähig.



            Dein Versuch, zu helfen, in allen Ehren - aber _sowas_ kann und darf man einfach nicht auf andere Leute loslassen.
            Schlimm genug, wenn das dein Code-Style ist, aber das sollte sich besser keiner abgucken.

            Und nimm's mit Humor, wer sich der Öffentlichkeit stellt muss mit harter Kritik rechnen
            VokeIT GmbH & Co. KG - VokeIT-oss @ github

            Kommentar


            • #7
              Table 'dantenbank_1.table_1' doesn't exist
              Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\ft\test.php on line 23
              mysql_select_db("datenbank_1", $connect1);
              mysql_select_db("datenbank_2", $connect2);
              Wem willst Du hier was erzählen? Echt, Dein Forenverhalten nervt. Das fängt schon damit an, dass es Dir zuviel ist, Deinen Titel zu kontrollieren
              Datanbankverbindung (zwei oder mehr)
              Bei solchen Nachlässigkeiten wundern mich Deine ewigen Syntaxprobleme überhaupt nicht.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Zitat von G.Schuster Beitrag anzeigen
                Sehr sinnvoll, wenn man Code für andere bereitstellt...
                Selbstverständlich sinnvoll - daher wurden ja auch entsprechend Variablennamen geändert, um das Verständnis klarer zu machen.

                Zitat von G.Schuster
                AUA!
                Ja, das denke ich mir auch gerade.

                Zitat von G.Schuster
                Mal abgesehen von den grausigen Variablennamen, die zudem nicht gerade von einer Konvention zeugen (und du arbeitest mit Clustern?), definiert man $__ZUGANG nicht per Default als String wenn man es eigentlich als Array verwendet.
                Und nochmal: Es ist umgeändert, damit der TO den Zusammenhang besser versteht ... was der TO letztendlich aus der gekürzten Version (auch das schrieb ich) macht, ist sein Bier - und wenn er es $schnibselkuchen nennen würde, mit "is_array" vorab noch prüft usw. usf. ... die Betonung lag auf "gekürzt" ... und nein, keine Cluster!

                Zitat von G.Schuster
                Sowohl Funktionsname (siehe leo.org) als auch Kommentar sind doch für jede Art von Code vollkommen daneben.
                Was hier vollkommen daneben ist, gebe ich nun mal nicht zum Besten ... das Posting sollte den Einstieg vereinfachen. Wie nun eine Funktion innerhalb einer Klasse heißt, die in einem einzigen Sonderfall eine Meldung zurückgibt, ist total marginal (und nochmal: die Klasse ist nicht vollständig). Ein Verweis auf einen Übersetzer ist da nicht nur vollkommen daneben, sondern auch noch total unlogisch ... aber hey, jeder nach seiner Fasson.

                Zitat von G.Schuster
                Sonderlich hilfreich ist die Funktion überdies auch nicht, vielleicht solltest du lieber den Grund ausgeben, warum keine Verbindung hergestellt wurde.
                Die Funktionalität steht überhaupt nicht zur Diskussion. Grundsätzlich gebe ich keine Fehler, Datenbankhinweise o. ä. aus technischer Sicht nach "außen" für den User wieder. Das geht den nämlich gar nichts an ... und sogar die Fehlermeldung als Text selbst ist eine andere, da der Originalwortlaut in Englisch ist, aber hier für Verwirrung gesorgt hätte. Aber man stelle sich vor, dass die Funktion nicht gezeigt worden wäre ... was käme dann - höchstwahrscheinlich von Dir? "Bääääh, unvollständig ... " ... wetten?

                Zitat von G.Schuster
                Wuaaaaaaa........ Jetzt lauf ich wirklich schreiend davon.
                Ich bitte darum - denn wenn man die Struktur nicht kennt, wie soll man dann auch noch qualitativ etwas beurteilen, oder? Es geht hier um einen Lösungsansatz ...

                Zitat von G.Schuster
                Im Vorbeirennen kann ich mir aber zwei letzte Kommentare nicht verkneifen:
                Es lässt sich wohl nicht vermeiden ...

                Zitat von G.Schuster
                Am liebsten würde ich den PHP- und Datenbankschutzverein anrufen...auch Software braucht eine Lobby!
                Anstatt hier derartige Hohlphrasen zum Besten zu geben: Dann zeig mir doch mal Deine tollen Vorschläge, die angeblich überarbeitet werden müssen, da soooooo schlecht ... aufgrund der gegebenen Struktur garantiere ich Dir, dass das Teil nicht brauchbar sein wird.

                Zitat von G.Schuster
                einstampfbar
                ... sowas ist ein Script grundsätzlich immer!

                Zitat von G.Schuster
                neubaufähig
                ... natürlich - aber wie gesagt: Mehr als heiße Luft kommt nicht ... belassen wir es dabei.

                Zitat von G.Schuster
                Dein Versuch, zu helfen, in allen Ehren - aber _sowas_ kann und darf man einfach nicht auf andere Leute loslassen.
                Ich falle auf die Knie und huldige Dich, oh großer PHP-Gott ... wie man sich an einer Funktion nur derartig aufgeilen kann ... hossa.

                Zitat von G.Schuster
                Schlimm genug, wenn das dein Code-Style ist, aber das sollte sich besser keiner abgucken.
                Ist es nicht ... aber ohne Deine Vorurteile kommst Du derzeit nicht weiter - sonst schreibt sich das nicht so flüssig, oder?

                Zitat von G.Schuster
                Und nimm's mit Humor, wer sich der Öffentlichkeit stellt muss mit harter Kritik rechnen
                Ich für meinen Teil differenziere "sachliche Kritik" und "überflüssige Kritik" - aber das habe ich Dir oben wohl klar gemacht. Nimm es mit Humor, wenn Deine Art von Kritik einfach keinen Nutzen hat ... komm also mal von Deinem hohen Ross herunter und mache mir einen besseren Vorschlag ... oder hilf dem TO, anstatt auf den Leuten herumzuhacken, die helfen wollen.
                Manche Menschen sind wie Schnitzel - nicht zäh, aber beidseitig bekloppt!

                Kommentar


                • #9
                  Ich beurteile dein Können nach dem, was du postet - wenn du verkürzte Schrott-Beispiele postest bleibt mir nichts anderes übrig, als das entsprechend zu bewerten.
                  Wenn du es besser könntest, warum postest du dann so einen Mist?
                  Und komm jetzt nicht wieder mit "Es soll ja nur ein Lösungsansatz sein", du weißt ganz genau, dass Anfänger mit Lösungsansätzen meist nichts anzufangen wissen.

                  >wetten?
                  Wette verloren.

                  > Ich falle auf die Knie und huldige Dich, oh großer PHP-Gott
                  Du machst dich lächerlich und zeigst, dass du die Kritik nichtmal ansatzweise verstanden hast.

                  > oder hilf dem TO, anstatt auf den Leuten herumzuhacken, die helfen wollen.
                  Ich helfe ihm schon damit, ihn vor sowas zu bewahren.
                  VokeIT GmbH & Co. KG - VokeIT-oss @ github

                  Kommentar


                  • #10
                    Verehrter G.Schuster, Du sollst nicht meine "Ansätze" bewerten, sondern dem TO Hilfestellung geben - das ist eigentlich der Sinn hier im Forum und ich habe durchaus schon häufiger von den Moderatoren gelesen, dass "Hilfestellung" gegeben wird - keine fertigen Scripte, da diese dann in die Scriptbörse gehören würden. Sind wir hier in der Scriptbörse?

                    Lächerlich mache ich mich nicht - es ist ein entsprechender zynischer Standard, um auf solche Postings zu reagieren. Wenn es "nur" die veränderten Variablen- und Funktionsnamen sind oder eine modifizierte Fehlermeldung (um nicht auf das Projekt Rückschlüsse machen zu können), so erlaube mir mich weiter "lächerlich" zu machen ...

                    Danke.
                    Manche Menschen sind wie Schnitzel - nicht zäh, aber beidseitig bekloppt!

                    Kommentar


                    • #11
                      Streitet euch bitte über PN weiter. Keine Post dazu mehr in diesem Thread!

                      Kommentar


                      • #12
                        Ich habe doch hier schon die Lösung beschrieben: http://www.php.de/datenbanken/70611-...tml#post533878

                        Kommentar


                        • #13
                          Zitat von nikosch Beitrag anzeigen
                          Wem willst Du hier was erzählen? Echt, Dein Forenverhalten nervt. Das fängt schon damit an, dass es Dir zuviel ist, Deinen Titel zu kontrollieren

                          Bei solchen Nachlässigkeiten wundern mich Deine ewigen Syntaxprobleme überhaupt nicht.

                          Kann ja mal passieren. wegen eine Buchstaben wird ein Aufstand gemacht

                          Thema hat sich erledigt läuft jetzt alles wunderbar Dank geht an xm22

                          Kommentar


                          • #14
                            wegen eine Buchstaben wird ein Aufstand gemacht
                            Wenn Du das denkst, hast Du nichts begriffen.

                            1 Buchstaben im Titel zu korrigieren kann nicht so schwer sein. Den Fehler zu sehen auch nicht.

                            1 Buchstaben im Code zu finden ist dank Debugging auch kein Problem. Aber anscheindend willst Du das nicht benutzen und Dein einziger Lebenssinn ist es, hier einen Müllthread nach dem anderen abzusetzen.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Zitat von nikosch Beitrag anzeigen
                              Wenn Du das denkst, hast Du nichts begriffen.

                              1 Buchstaben im Titel zu korrigieren kann nicht so schwer sein. Den Fehler zu sehen auch nicht.
                              EDIT: hab den Text lieber gelöscht...ich äußere mich dazu nicht mehr...

                              Kommentar

                              Lädt...
                              X