ODBC auf MySQL-Abfragen ändern

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

  • ODBC auf MySQL-Abfragen ändern

    Hallo,

    ich wechsele von einer Access-DB auf MySQL. Geht an sich auch relativ problemlos, wie mir scheint. Aber jetzt hab ich doch ein Problem:

    Ich verwende in meinen PHP-Scripts bisher odbc_fetch_row bei Access, die Ergebniszeile lässt sich dann wahlweise mit den Feldnamen oder über die Feldnummern ansprechen.
    Bei MySQL-Abfragen wird unterschieden:
    mysql_fetch_row -> nur Feldnummern (meiner meinung nach die bessere Abfrage in vielen Fällen)
    mysql_fetch_object -> nur über Feldnamen (z.B. in Schleifen mit Indexzähler nötig)

    Das wär ein ganz schöner Hammer das alles in den bestehenden Scripts zu berücksichtigen und zu ändern, v.a. zeitaufwendig.

    Gibt's da ne andere Lösung?? Oder überseh ich was (boin ein bissler aus der Übung...)

  • #2
    mysql_fetch_array() liefert dir beides, oder je nach zusatz das eine oder andere.
    Kissolino.com

    Kommentar


    • #3
      mysql_fetch_array($result, MYSQL_BOTH); // liefert beide

      Offe

      Kommentar


      • #4
        Danke für die flotte Antwort, das hört sich gut an. Aber ich sitz wohl noch auf der Leitung...Wie teile ich dem mysql_fetch_array die Zeile mit? Analog dazu:
        PHP-Code:
        odbc_fetch_row($result$Zeilennr

        Folgendes Beispiel hab ich auf php.net gefunden:

        PHP-Code:
        mysql_connect("localhost""mysql_user""mysql_password") or
           die(
        "Could not connect: " mysql_error());
        mysql_select_db("mydb");

        $result mysql_query("SELECT id, name FROM mytable");

        while (
        $row mysql_fetch_array($resultMYSQL_BOTH)) {
           
        printf ("ID: %s  Name: %s"$row[0], $row["name"]);
        }

        mysql_free_result($result); 
        Welche Zeile liest das jetzt aus?? kein Scheiß...Ich seh das wirklich nicht.

        Zuletzt geändert von Stephan666; 28.02.2004, 14:49.

        Kommentar


        • #5
          Original geschrieben von Stephan666
          Welche Zeile liest das jetzt aus?? kein Scheiß...Ich seh das wirklich nicht.
          was soll das mit dem row[0] ? nimm einfach $row['id'] & $row['name'] und gut is
          Kissolino.com

          Kommentar


          • #6
            Das war nur das geklaute Beispiel von php.net, von dem ich die Syntax abgucken wollte - soll nur verdeutlichen dass man sowohl Name als auch Nummer nehmen kann, um ein Feld anzusprechen, sofern man MYSQL_BOTH verwendet.

            Mit $row['id'] wird ja das Feld ['id] angesprochen, das ist mir schon klar. Nur - das Feld von welcher Zeile?
            Wie ich der Funktion die Zeile des gewünschten Datensatzes mit auf den Weg gebe versteh ich leider immer noch nicht...

            Kommentar


            • #7
              du musst bei while einen zähler mitlaufen lassen...
              PHP-Code:
              $i=0;
              while (
              $row mysql_fetch_array($resultMYSQL_BOTH)) {
                 
              printf ("ID: %s  Name: %s"$row[$i], $row["name"]);
              $i++;

              probier das mal
              Kissolino.com

              Kommentar


              • #8


                hm, ich glaub wir "reden" aneinander vorbei.

                Wenn ich bisher das feld 'ID' aus der 3. Zeile abfragen wollte, hab ich in etwa folgendes gemacht:

                PHP-Code:
                $Zeilennr 3;                                         //Variable für Zeilenangabe
                odbc_fetch_row($result$Zeilennr);      //komplette 3. Zeile auslesen
                echo odbc_result($this->result'ID');     //Feld ID aus 3. Zeile ausgeben 
                Wenn ich jetzt
                PHP-Code:
                mysql_fetch_array($resultMYSQL_BOTH); 
                verwende, wo geb ich dann an dass ich die _3. Zeile_ auslesen will?

                Das blicke ich irgendwie nicht.

                Kommentar


                • #9
                  Original geschrieben von Stephan666

                  hm, ich glaub wir "reden" aneinander vorbei.
                  jepp ... tun wir,

                  versuch mal mit mysql_data_seek() und mysql_fetch_array() zu arbeiten (ohne while).
                  könnte sein, dass das klappt (auch wenn das manual dazu nix sagt) ... ansonsten
                  fällt mir dazu nix mehr ein
                  Kissolino.com

                  Kommentar


                  • #10
                    So, ich hab mir das ganze nochmal angesehen.

                    Mit
                    PHP-Code:
                    $result mysql_db_query($dbName$sqlString$dbLink);
                    echo 
                    mysql_result($result$row$field); 
                    kann man das Feld $field sowohl mit dem Namen als auch mit der Nummer angeben. Ist vielleicht die einfachste Variante.

                    Allerdings lassen sich die odbc-Abfragen dann nicht so einfach abändern.

                    Da sehen die entsprechenden Abfragen so aus:
                    PHP-Code:
                    $result odbc_exec($dbLink$sqlString);        
                    odbc_fetch_row($result$row)                
                    echo 
                    odbc_result($result$field);    //$field kann Name oder Nummer sein 
                    Und ich hatte halt gehofft dass man "odbc" einfach gegen "mysql"
                    austauschen kann und das ganze dann funktioniert, so müssen v.a. Schleifen umgeschrieben werden.

                    Die Syntax scheint bei mysql_fetch_array und mysql_fetch_row weiss ich nach wie vor nicht wie ich analog zu odbc_fetch_row (s.o.) die Zeile angebe.

                    Vielleicht weiss ja noch jemand was dazu.

                    EDIT:
                    Ich denke fast dass man die genaue Zeile schon im SQL-Statement angeben muss. Kann mir das jemand bestätigen?
                    Zuletzt geändert von Stephan666; 28.02.2004, 16:54.

                    Kommentar


                    • #11
                      mysql_result() ist imho die schlechteste möglichkeit daten zu handlen
                      => zu langsam ... auf einzelne datensätze greifst du eher mit vernünftigen
                      abfragen zu => WHERE/JOIN ... LIMIT etc. ...

                      du kannst auch mit mysql_fetch_array() erst alle datensätze in 1 array
                      überführen, das sowohl indiziert & assoziativ ist und dann mit array
                      funktionen weiterarbeiten ... wenn du so arbeiten willst/musst

                      die grundfrage ist aber immer ... was willst du tun?
                      Kissolino.com

                      Kommentar


                      • #12
                        Mit großen Datenmengen muss ich vorerst nicht arbeiten, von daher ist im Augenblick mysql_result() die Lösung meiner Wahl, auch wenn's nicht die sauberste ist.

                        Ich lese in meinen Abfragen Ergebnistabellen - im schlimmsten Fall - 100 - 200 Zeilen aus. Die gebe ich dann in HTML-Tabellen aus.
                        Traffic auf dem Server und die Anzahl der Anfragen ist sehr gering. Die Performance spielt deshalb in der Praxis nur eine kleine Rolle.

                        Aber ich muss auf jeden Fall die Reihen angeben können, und das kann ich mit mysql_fetch_array() im Mom nicht...

                        Als größeres Problem hat sich mittlerweile sowieso die Verwendung von Views herausgestellt.

                        Kommentar


                        • #13
                          Du solltest dir vielleicht überlegen eine Datenbankklasse zu benutzen. Dann sollte der Übergang von einer Datenbank zur nächsten, beim nächsten mal, relativ einfach sein.


                          Offe

                          Kommentar

                          Lädt...
                          X