Datensätze aus DB herauslesen

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

  • Datensätze aus DB herauslesen

    Hallo,

    fürs Datenherauslesen benutze ich fastimmer:
    mysql_fetch_object($result).

    Aber immer wenn ich wegen einem Problem in den Foren nachschaue oder
    mir fertige Scripte anschaue, sehe ich dass fast alle (99%) benutzen:

    mysql_fetch_array()

    Aus reinem Gewohnheit oder gibt etwas was ich nicht weiss?
    Schnell? Sicher? Weniger Speicherbelegung?

    Danke
    KannkeinPHP

  • #2
    mysql_fetch_array ist eigentlich ganz schlecht.

    Entweder mysql_fetch_object, oder mysql_fetch_assoc (nutze ich immer) oder mysql_fetch_row.
    mysql_fetch_array macht - siehe Manual - eine Kombination aus _assoc und _row. Und für gewöhnlich braucht man eh nur eines von beidem, heißt unnötiger Ressourcenverbrauch. (Ob das ins Gewicht fällt oder nicht möchte ich gar nicht ausdiskutieren.)

    Zwischen obigen dreien sollte man dann das wählen, was am sinnvollsten erscheint.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Vielen Dank Ghostgambler.

      Ich hätte da aber noch eine Frage.
      die passt eigentlich nicht 100% zu dem Thema aber...

      DB ergebnisse werden meist mit Tabellen auf die seite gebracht.

      ich benutze möglichstviel <?php ?>
      also nicht
      echo "<tr><td>name</td><td>$name</td></tr>";

      sondern
      <tr><td>name</td><td><?php echo $name; ?></td></tr>

      so finde ich mein code übersichtlicher als mit vielen ", ' , \" und \"" zeichen...

      ist es ein Last für den Server, dass man oft mit php-Tag arbeitet?

      mit dem zweiten Variante mache ich eigentlich weniger Fehler :-)

      Kommentar


      • #4
        mysql_fetch_array ist eigentlich ganz schlecht.
        Sehe ich nicht so!

        Sondern: mysql_fetch_object ist eigentlich ganz schlecht.

        Weil:
        Nicht alle von MySQL erlaubten Spaltenbezeichner sind als PHP Objekt Eigenschafts Bezeichner erlaubt. Man kommt also u.U. nicht an alle Spalten. Performance und Speicherverbrauch ist da recht unwichtig, solange man nicht mit fetten BLOBs und TEXT agiert.

        Wenn man schon Objekte haben möchte, dann doch nicht so, sondern man verwendet dann besser ein "echtes" ORM. Z.B. Propel, oder doctrine
        Zuletzt geändert von combie; 08.06.2009, 13:12.
        Wir werden alle sterben

        Kommentar


        • #5
          Zitat von combie Beitrag anzeigen
          Sondern: mysql_fetch_object ist eigentlich ganz schlecht.
          ACK. z.B. gibt es "Experten", die die Spaltenname mit Umlaut, Leerzeichen und wasweissich drin haben, somit kann man schlecht mit mysql_fetch_object arbeiten (natürlich kann man in der Query mit Alias arbeiten, aber das ist 'ne andere Geschichte)

          Kommentar


          • #6
            Hm, ich weiß eigentlich stets wie die Namen der Tabellen und Spalten in der DB heißen. Ich spezifiziere sie ja auch in meiner Query und greife dann auf die Properties des von mysql_fetch_object() erzeugten Objekts zu.
            Wenn jemand die DB ändert und z.B. Spalten mit Umlauten hinzufügt, kratzt mich das nicht, denn ich verwende kein SELECT * sondern gebe alle Spalte an.

            Kommentar


            • #7
              Ein dreifaches "HOCH" auf die OOP.
              Aber sie muß auch einen Mehrwert bringen, und den sehe ich da nicht.

              mysql_fetch_object ist doch im Prinzip nix anderes als:
              PHP-Code:
              $row = (object) mysql_fetch_assoc($res); 
              Ein Array im OOP Mäntelchen.

              Wie schon gesagt:
              Einen echten Mehrwert gibts erst bei Verwendung eines ORM.

              Aber Egal: Es ist kein echter Fehler wenn man mysql_fetch_object verwendet. Es kann nur zu überraschenden Ergebnissen (Meldungen) führen.
              Wir werden alle sterben

              Kommentar


              • #8
                Da stimme ich dir zu. Unbedachtes Verwenden kann tödlich sein.
                Der Mehrwert liegt für mich einzig in der schöneren Schreibweise, ist also rein subjektiv.
                Einen kleinen Nachteil hat es noch: PHP hat viele praktische Array-Funktionen wie array_merge_recursive() oder array_combine(). Für Objekte gibt es das nicht.

                Kommentar


                • #9
                  Zitat von asp2php Beitrag anzeigen
                  ACK. z.B. gibt es "Experten", die die Spaltenname mit Umlaut, Leerzeichen und wasweissich drin haben, somit kann man schlecht mit mysql_fetch_object arbeiten (natürlich kann man in der Query mit Alias arbeiten, aber das ist 'ne andere Geschichte)
                  Naja, das ist nur bedingt ein Problem. Es geht in PHP auch anders, dreckig, aber es geht:
                  PHP-Code:
                  $obj=new stdClass();
                  $obj->{'abc äöü'}=123;
                  var_dump($obj); 
                  Das ist trotzdem kein Grund für mysql_fetch_object. Wie combie schon sagte, vernünftig auf ein Objekt mappen oder direkt das Array verwenden.

                  Kommentar


                  • #10
                    ist es ein Last für den Server, dass man oft mit php-Tag arbeitet?
                    Nein, bzw. irrelevant. (Vielleicht sind doppelte Anführungszeichen langsamer, da du das aber nie merken wirst spielt es keine Rolle)
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      Zitat von onemorenerd Beitrag anzeigen
                      Einen kleinen Nachteil hat es noch: PHP hat viele praktische Array-Funktionen wie array_merge_recursive() oder array_combine(). Für Objekte gibt es das nicht.
                      Schon - aber wann wendet man diese schon mal auf einen einzelnen Datensatz an?

                      Und wenn ich mehrere Datensätze in einem Array zusammenfassen möchte - dann ist die Entscheidung, ob dessen Unterelemente wiederum Arrays oder Objekte sein sollen, auch wieder einzeln zu treffen.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Zitat von tontechniker Beitrag anzeigen
                        Nein, bzw. irrelevant. (Vielleicht sind doppelte Anführungszeichen langsamer, da du das aber nie merken wirst spielt es keine Rolle)
                        schön, dass einer meine zweite Frage gelesen hat :-)

                        Kommentar

                        Lädt...
                        X