Ankündigung

Einklappen
Keine Ankündigung bisher.

Pharse error bei Feldname 24_Hour

Einklappen

Neue Werbung 2019

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

  • Pharse error bei Feldname 24_Hour

    Hallo,

    habe leider in meiner DB einen Feldnamen als 24_Hours bezeichnet

    wenn ich mir diesen nun mit
    $row->24_Hours
    ausgeben lasse so bekomme ich einen Pharse_Error.

    Kann ich das irgendwie beheben oder muss ich nun meine Datenfeldnamen ändern?

    Grüße
    Jürgen

  • #2
    $row->{'24_Hours'}

    Wäre aber vermutlich trotzdem eine gute Idee, den Feldnamen zu ändern, wenn das jetzt noch halbwegs schmerzfrei geht.

    Kommentar


    • #3
      hallo
      hättest Du eine gute Seite für mich wo Beispiele aufgeführt werden wie man mysql-feldnamen nicht bezeichnen soll

      ich habe eigentlich fast in jedem feldnamen "_" jedoch nur in einem oder 2 "12_text"

      wäre dann wohl auch fatal mit
      "text_123" oder?

      Grüße Jürgen

      Kommentar


      • #4
        Seite weiß ich jetzt keine, aber das hier dürfte solide sein:

        - Feldnamen, Tabellennamen und dergleichen mit einem Buchstaben aus a-z beginnen. (Edit: Oder Unterstrich, um das hier an Post #10 anzugleichen.)
        - Danach nur a-z, 0-9 und Unterstrich verwenden.
        - Nach Möglichkeit nur Kleinschreibung verwenden. Vor allem bei Datenbank- und Tabellennamen. (Es gibt da mitunter Probleme mit Betriebssystemen, die zwischen Groß- und Kleinschreibung bei Dateinamen unterscheiden.)

        "text_123" ist also unproblematisch.

        Kommentar


        • #5
          ok vielen Dank
          da ich meine db nicht auf anderen Systemen laufen lassen muss kann ich das mit meinen Feldnamen noch verkraften da ich diese mit Großbuchstaben geschrieben habe.
          Das Feld mit der 24_Hour werde ich dann doch ändern

          Danke

          Grüße
          Jürgen

          Kommentar


          • #6
            Großbuchstaben sind kein Problem, du musst dich nur dann auch immer daran halten. Als Spaltenname "Test" und später aus Faulheit nur noch "test" benutzen geht nicht.
            Windows Server gehören NICHT ins Internet!

            Dildo? Dildo!

            Kommentar


            • #7
              Für MySQL kannst du hier Schema Object Names nachschauen. MySQL ist da sehr großzügig, mit dem Tipp von mermshaus solltest du immer auf der sicheren Seite liegen.
              Für Feld- und Tabellennamen (Identifier) solltest du nur Kleinbuchstaben benutzen, SQL-Statements wie SELECT in Großbuchstaben notieren.
              Dann gibt es noch eine große Anzahl reservierter Wörter, die du meiden solltest oder quoten mußt.

              Kommentar


              • #8
                Danke für die Links.

                Kommentar


                • #9
                  Zitat von trollface Beitrag anzeigen
                  Großbuchstaben sind kein Problem, du musst dich nur dann auch immer daran halten. Als Spaltenname "Test" und später aus Faulheit nur noch "test" benutzen geht nicht.
                  Hi,

                  Das ist so nicht ganz richt wenn Du den Kontext nicht genauer beschreibst.

                  Das trifft nur auf MySQL zu. Andere Datenbanken handhaben das ganz anders. Z.B. PgSQL kennt nur klein geschriebene Bezeichner. Wenn man dort ein Tabellenfeld anlegt ist der Feldname immer klein geschrieben, selbst wenn mans beim Erstellen in Großschreibung definiert.

                  Von daher wäre der bessere weg sicher gleich immer kleinschreibung zu verwenden. Da ist man auch gewappnet wenn mal ein anderes DBMS ins Spiel kommt. Ich spreche da (leider) aus Erfahrung.

                  Gruß, Ulf
                  PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                  Kommentar


                  • #10
                    Zitat von selfmade01 Beitrag anzeigen
                    habe leider in meiner DB einen Feldnamen als 24_Hours bezeichnet
                    Hi,

                    Falsch ist der Bezeichner nicht wirklich, wenn Du z.B. MySQL verwendest. Bei anderen DBMS kann das schon falsch sein.

                    Prinzipiell hat sich bei Entwicklern eingebürgert für Bezeichner Namen zu wählen die mit folgenden Regex abgedeckt werden: ^[a-z_][a-z0-9_]*$

                    Das bedeutet, die Bezeichner dürfen nur mit kleingeschriebene Buchstaben oder einem Unterstrich beginnen. Evtl. nachfolgende Zeichen dürfen auch numerischer Natur sein. Alle erlaubten Zeichen liegen im ASCII Zeichensatz.

                    Ich kenne kein DBMS das keine Bezeichner unterstützt die mit einer Zahl beginnen. Von daher ist es DB-technisch nicht falsch. Allerdings hast Du das dadurch u.U. Programmiertechnisch entstehende Problem erkannt. Bezeichner in vielen Programiersprachen dürfen laut deren Spezifikation eben nicht mit einer Zahl beginnen.

                    PHP nimmt da eine kleine Sonderstellung ein da es z.B. dynamische Klassenfelder (dynamische Properties) ermöglicht wo wie in Deinem Fall dann halt bei normalen Zugriff darauf Probleme entstehen können.

                    Wie Du das Feld trotzdem ansprechen kannst wurde Dir ja bereits gesagt.

                    MfG, Ulf
                    PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                    Kommentar


                    • #11
                      Zitat von Ulfikado Beitrag anzeigen
                      Hi,


                      Das bedeutet, die Bezeichner dürfen nur mit kleingeschriebene Buchstaben oder einem Unterstrich beginnen. Evtl. nachfolgende Zeichen dürfen auch numerischer Natur sein. Alle erlaubten Zeichen liegen im ASCII Zeichensatz.


                      MfG, Ulf
                      Hallo,
                      ich habe nur ein Feld mit einer Zahl beginnend und ändere dies nun ab.

                      Mein Problem ist jedoch, alle anderen Felder beginnen stets mit einem Großbuchstaben.
                      Da nur ich an dem Programm arbeite weiss ich das auch und setze entsprechend meine Abfrage mit Großbuchstaben.

                      Frage:
                      Wenn jetzt die Abfragen funktionieren kann das irgendwann mal Probleme bereiten ?
                      Gemeint ist nicht wenn im Programm die Felder falsch (also mit beginnenden Kleinbuchstaben) angesprochen werden

                      Grüße Jürgen

                      Kommentar


                      • #12
                        Zitat von selfmade01 Beitrag anzeigen
                        Wenn jetzt die Abfragen funktionieren kann das irgendwann mal Probleme bereiten ?
                        Hi Jürgen,

                        Nur wenn Du das DBMS wechselt und dieses das nicht unterstützt. Es wär allerdings für Dich sicher nicht von Nachteil, wenn Du das bei zukünftigen Projekt beachten würdest.

                        Nur noch am Rande

                        Es gibt 2 Schreibweisen für Bezeichner die oft genutzt werden

                        - hungarian_notation: Wortelement sind durch unterstrich getrennt und alle
                        in Kleinschreibung
                        - camelCaseNotation: Jedes Wortelement beginnt mit einem Großbuchstaben
                        wobei der erste Buchstabe auch in kleinschreibung genutzt werden kann.

                        Deine Variante Foo_Bar oder foo_Bar wäre ein Mix aus den beiden. Ist nicht falsch aber irgenwie ungewohnt anzuschauen. Aber überr Geschmack läst ja ja streiten

                        Aber spätestens wenn Du mal in einem Team programmieren must wird man Dir diese Dinge möglicher Weise um die Ohren hauen!

                        Gruß, Ulf
                        PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                        Kommentar


                        • #13
                          Hallo Ulf,
                          ok dann benutze ich eine Mischung zw. - camelCaseNotation (nur mit Großbuchstaben am Anfang) und - camelCaseNotation
                          da ich die Bezeichnungen mit Unterstrich trennte Beispiel: Ph_Min, Ph_Max, Temp_Min etc.
                          in Zukunft werde ich mich dann an diese o.g. Regeln halten. Ich wollte nur eine besser Lesbarkeit im Programm haben, so sehe ich schnell (zumindest für mich) wo, was hingehört
                          War halt zu gut gemeint...


                          Grüße Jürgen

                          Kommentar


                          • #14
                            Tue dir selbst einen Gefallen und verstümmel die namen nicht.

                            Code:
                            OutdoorTemperature
                            IndoorTemperature
                            CaptureTime
                            CaptureModule
                            1000 mal verständlicher als:

                            Code:
                            out_temp
                            in_temp
                            c_time
                            c_mod
                            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                            Kommentar


                            • #15
                              Ich glaub ihr habt mich nun doch alle so weit gebracht das ich mit suchen/erstzen das ganze ummodeln werde.
                              so ein schei,,,,

                              Trotzdem Danke an Alle

                              Kommentar

                              Lädt...
                              X