oder aray?

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

  • oder aray?

    Mich würde mal ineressieren, was von der Perfomance und der Zugriffszeit schneller arbeitet. Ich habe z.B. eine Abfrage:
    PHP-Code:
    $res mysql_query ("SELECT * FROM Tabelle"
    Was wäre nun für die Ergebnisse besser zu verwenden?
    PHP-Code:
    $feld1 = (mysql_result,0,"feld1");
    $feld2 = (mysql_result,0,"feld2");
    $feld3 = (mysql_result,0,"feld3");
    ... 
    oder:
    PHP-Code:
    $row=mysql_fetch_array($res
    und anschließend per $row['feld1'], $row['feld2'], $row['feld3'], usw. ausgeben lassen?

    Im Prinzip hat doch beides die gleiche Funktion, aber was ist für die Verwendung besser geeignet?
    Zuletzt geändert von Emanon; 16.07.2004, 23:41.

  • #2
    lesen bildet
    Wenn auf Anfrageergebnisse mit vielen Datensätzen zugegriffen werden soll, sollten Sie Funktionen, die auf ganze Datensätze zugreifen,in Betracht ziehen (siehe unten). Diese Funktionen liefern bei einem einzigen Aufruf den Inhalt mehrerer Felder und sind aus diesem Grund SEHR viel schneller als mysql_result(). Beachten Sie auch, dass die Angabe eines numerischen Offsets für ein Feld sehr viel schneller ist als die Angabe eines Feldnamens oder tabellenname.feldname.
    quelle: http://de3.php.net/manual/de/function.mysql-result.php
    Kissolino.com

    Kommentar


    • #3
      Heißt das, daß Arrays bei größeren Ergebnissen einer Abfrage schneller sind, man aber bei kleineren Abfragen auf Variablen zurückgreifen sollte?

      Sorry für die blöde Fragerei, aber so ganz verstehe ich diese Erläuterung nicht.

      Kommentar


      • #4
        Wenn es viele Spalten sind ist es schneller sie gleich auf einmal auszulesen (mysql_fetch_array), anstatt jede einzeln, wenn es nur eine ist, dann nicht.

        Kommentar


        • #5
          mysql_fetch_array/row zieht jeweils eine komplette zeile aus dem db-ergebnis, gleich 1 anfrage für zB 8 spalten ... mysql_result spricht immer nur eine spalte in einer zeile eines db-ergebnisses an, heisst also für 8 spalten 8 anfragen an die ergebnismenge (nicht an die db) ... demzufolge muss es langsamer sein. afaik tun sich beide funktionen nichts, wenn du auf eine db-abfrage 1 oder 2 spalten (werte) zurückbekommst, aber das lässt sich ja mit einem einfachen benchmarking ( microtime() ) messen.
          Kissolino.com

          Kommentar


          • #6
            Vielen Dank, damit ist die Frage selbst für mich ausreichend beantwortet. Es geht mir nämlich darum, daß ich eine sehr umfangreiche Tabelle in der DB habe und diese bisher einzeln abgefragt wird (28 Felder = Zeilen Code). Bei einer solchen Abfrage arbeite ich dann wohl besser mit mysql_fetch_array, denn es ist zumindest schon viel weniger Code und daher übersichtlicher und zudem, wie Ihr schreibt, schneller.

            Danke nochmals für die Erläuterungen.


            NACHTRAG:
            Kann ich denn die Werte von mysql_fetch_array auch gleich wieder in die Datenbank eintagen oder muss ich denen dann wine Variable zweisen?
            z.B.:
            PHP-Code:
            query "INSERT INTO Tabelle VALUES ('$row['feld1']', '$row['feld2']', '$row['feld3']')"
            oder
            PHP-Code:
            $query "UPDATE Tabelle SET feld1 = '$row['feld1']', feld2 = '$row['feld2']', feld3 = '$row['feld3']' WHERE id='$selected'"
            Zuletzt geändert von Emanon; 16.07.2004, 18:00.

            Kommentar


            • #7
              Original geschrieben von Emanon
              Kann ich denn die Werte von mysql_fetch_array auch gleich wieder in die Datenbank eintagen oder muss ich denen dann wine Variable zweisen?
              du musst dir nur einen gültigen query-string zusammensetzen.

              wenn du für alle spalten (oder die ersten x) wieder einen wert angeben willst, mag die VALUE-schreibweise ausreichen; wenn du "lücken" dazwischen hast (z.b. soll für die zweit spalte kein wert explizit vorgegeben werden), müsstest du bei VALUE eine lücke lassen ('feldwert1', , 'feldwert2', ...) - oder eben zur "SET spalte = wert"-schreibweise greifen.


              worauf du aber achten solltest, ist eine korrekte string-notation.
              gerade bei array-elementen, die direkt im string angesprochen werden, kann es leicht zu problemen kommen.
              an so einer stelle lieber den string auftrennen:

              PHP-Code:
              query "INSERT INTO Tabelle VALUES ('".$row['feld1']."', '".$row['feld2']."', '".$row['feld3']."')"
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                OK, so weit so gut. Was ist aber, wenn zwischen den strings eine vordefinierte Variable in die DB eingetragen werden muss?
                z.B.:
                PHP-Code:
                query "INSERT INTO Tabelle VALUES ('".$row['feld1']."', '$feld2', '".$row['feld3']."', '$feld4', '$feld5', '".$row['feld6']."')"
                Wenn ich jetzt die einzelnen Einträge kommentieren möchte,
                PHP-Code:
                query "INSERT INTO Tabelle VALUES ('".$row['feld1']."', ' // Feld1
                $feld2', '" //Feld2
                .$row['feld3']."', ' //Feld3
                $feld4', ' //Feld4
                $feld5', '" //Feld5
                .$row['feld6']."' //Feld6
                )"

                zeigt der Editor mir Fehler an. Das dient eben dazu, überwachen zu können, daß auch wirklich alle Felder gefüllt werden. Habe ich die Variablen vielleicht falsch formatiert? Müssen die vielleicht in " statt in Hochkommas?

                Sorry, aber durch die ganzen Formatierungsregeln blicke ich partout nicht durch.
                Zuletzt geändert von Emanon; 16.07.2004, 22:01.

                Kommentar


                • #9
                  sauberer wäre es 1. so:
                  PHP-Code:
                  query "INSERT INTO Tabelle VALUES ('".$row['feld1']."', '".$feld2."', '".$row['feld3']."', '".$feld4."', '".$feld5."', '".$row['feld6']."')"
                  2. gehören nur strings in ' ' bzw " ", integer/float werte nicht:
                  PHP-Code:
                  INSERT INTO Tabelle VALUES ("ich bin ein string"17
                  3. empfiehlt es sich, ein $ vor "query" zu setzen oder die fehlermeldung zu posten
                  Kissolino.com

                  Kommentar


                  • #10
                    Vielen Dank Wurzel.

                    1. & 2. Genau das wollte ich wissen, konnte es bisher nur nie behalten.

                    3. Das $ hab ich bei mir auch drin *g*, war hier nur ein Schreibfehler.


                    NACHTRAG:
                    Ich hab doch noch eine blöde Frage dazu, denn ich kann integer oder float nicht so recht zuordnen. Wenn ich nun Zahlenwerte wie 0 oder 1 (für ja oder nein) und 0.00 (für Beträge) in die DB eintragen will, in welchen Zeichen müssen die stehen? Ohne Zeichen und in Hochkommas bekomme ich auch wieder Fehler im Editor angezeigt.

                    Die Bedeutungen von den Fachbegriffen bekomme ich wohl nie in die Birne.


                    NACHTRAG 2:
                    Was ist eigentlich der Unterschied zwischen $row[date] und $row["date"]? Es scheint ja beides zu funktionieren. Gibt es da vielleicht eine Faustregel, wann man welche Form benutzt?
                    Zuletzt geändert von Emanon; 16.07.2004, 23:37.

                    Kommentar


                    • #11
                      Original geschrieben von Wurzel
                      2. gehören nur strings in ' ' bzw " ", integer/float werte nicht
                      aber auch hier ist vorsicht geboten.

                      wenn man einen integer-wert "erwartet" (vom client kommend), öffnet man sich hier schnell ein tor für sql-injections, wenn man ihn nicht in hochkommata verpackt und vorher keinen expliziten type-cast durchgeführt hat.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Aber so müsste es dann doch funktionieren und einigermaßen sicher sein, oder?
                        PHP-Code:
                        $query "INSERT INTO auctions VALUES ('".$auction_id."', '" //id
                                                                    
                        .$row['user_id']."', '" //user
                                                                   
                        .$row['title']."', '" //title
                                                                   
                        .$a_starts."', '" //starts
                                                                   
                        .$txtBeschreibung."', '" //description
                                                                   
                        .$url_1."', '" //pict_url
                                                                   
                        .$row['category']."', '" //category
                                                                   
                        .$fldMinBid."', '" //minimum_bid
                                                                   
                        .$row['reserve_price']."', '" //reserve_price
                                                                   
                        .$row['auction_type']."', '" //auction_type
                                                                   
                        .$row['duration']."', '" //duration
                                                                   
                        .$row['location']."', '" //location
                                                                   
                        .$row['location_zip']."', '" //location_zip
                                                                   
                        .$row['shipping']."', '" //shipping
                                                                   
                        .$row['payment']."', '" //payment
                                                                   
                        .$row['international']."', '" //international
                                                                   
                        .$a_ends."', " //ends
                                                                   
                        0.0000", " //current_bid
                                                                   
                        0", '"//closed
                                                                   
                        .$row['photo_uploaded']."', '" //photo_uploaded
                                                                   
                        .$row['quantity']."', " //quantity
                                                                   
                        0", '" //suspended
                                                                   
                        .$fett1."', '" //fett
                                                                   
                        .$marker1."', '" //marker
                                                                   
                        .$topkat1."', '" //topkat
                                                                   
                        .$galerie1."', '" //galerie
                                                                   
                        .$galeriebild1."', '" //galeriebild
                                                                   
                        .$row['zustand']."', '" //zustand
                                                                   
                        .$row['art_nr']."', '" //artnr
                                                                   
                        .$fldSofortKauf."', " //buynow
                                                                   
                        0", " //seller_rate
                                                                   
                        0", '" //buyer_rate
                                                                   
                        .$url_2."', '" //pict_url2
                                                                   
                        .$url_3."', '" //pict_url3
                                                                   
                        .$url_4."', '" //pict_url4
                                                                   
                        .$url_5."', '" //pict_url5
                                                                   
                        .$url_6."', "  //pict_url6
                                                                   
                        0")"//itemcounter 

                        Kommentar


                        • #13
                          Original geschrieben von Emanon
                          Aber so müsste es dann doch funktionieren
                          ob es "funktioniert", merkst du ja sicher selber.
                          wenn nicht, sind die angesprochenen debugging-maßnahmen, wie ausgabe des query-strings und mysql_error(), deine freunde ...

                          und einigermaßen sicher sein, oder?
                          tja, so nicht zu sagen.
                          ich weiß nicht, aus welchen quellen deine daten kommen ...
                          wenn da usereingaben/vom client kommende werte bei sind, ist es sehr riskant - eine absicherung solcher werte ist ja derzeit nirgends zu sehen.

                          suche diesbezüglich nach mysql_escape_string.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Wieso finde ich in SelfPHP nichts über mysql_escape_string? Nun gut, dann werde ich morgen mal auf die Suche nach einer Definition gehen und schauen, ob ich es verstehe.

                            Vielen Dank jedenfalls für die nützlichen Tips.

                            Kommentar


                            • #15
                              Original geschrieben von Emanon
                              Wieso finde ich in SelfPHP nichts über mysql_escape_string?
                              tja, gute frage ... die wieder mal beweist, dass selfphp wirklich nicht die beste anlaufstelle für solche sachen ist.

                              halte dich lieber an das original PHP-manual, http://www.php.net/manual/de/
                              dort findest du bessere erklärungen zu den befehlen, als bei selfphp.


                              und nach mysql_escape_string kannst du auch mal hier im forum suchen - über das absichern von usereingaben vor der benutzung in mysql-queries haben wir hier schon ein paar längere diskussionen geführt.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X