Michael S.: SQL query / Leerzeichen

Ich arbeite gerade an einem Script, welches eine Art Kontaktdatenbank bedienen soll. Dabei ist folgendes Problem aufgetaucht:

wie verfahre ich mit Leerzeichen in Spaltennamen?

Ich hab einiges durchprobiert, aber Sachen wie
$sql = "SELECT Kontakte.'Zweiter Vorname' FROM $datenbank.Kontakte";
will mir PHP nicht abnehmen...

mfg
Micha

  1. echo $begrüßung;

    wie verfahre ich mit Leerzeichen in Spaltennamen?
    $sql = "SELECT Kontakte.'Zweiter Vorname' FROM $datenbank.Kontakte";

    Wende die Regeln für Database, Table, Index, Column, and Alias Names an.

    echo "$verabschiedung $name";

  2. yo,

    wie verfahre ich mit Leerzeichen in Spaltennamen?

    am besten vermeiden. der unterstrich ist ein gängiges mittel, um zwei worte in einem namen zu trennen, also Zweiter_Vorname.

    dann stellt sich noch die frage nach deinem dbms und der version und vor allem der fehlermeldung.

    Ilja

  3. hi,

    wie verfahre ich mit Leerzeichen in Spaltennamen?

    Die eliminierst du, sollten sie dort wirklich wider aller Vernunft auftreten, bereits in der Designphase.

    Ich hab einiges durchprobiert, aber Sachen wie
    $sql = "SELECT Kontakte.'Zweiter Vorname' FROM $datenbank.Kontakte";
    will mir PHP nicht abnehmen...

    Doch, PHP nimmt dir das gerne ab, PHP ist es furzegal, ob du Unsinn an die Datenbank weitergibst.

    Wenn jemand sich beschweren dürfte, dann wäre das die Datenbank.
    Da du nicht sagst, welches DBMS du verwendest, kann man nur vermuten - bei MySQL zum Beispiel wäre es die Lösung^WWorkaround [1], den Spaltennamen in Backticks zu setzen.

    [1] Ja, nur Workaround - die Lösung wäre, siehe oben, solch einen Unfug schon in der Designphase abzustellen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. vielen Dank für den beissenden Humor... auch wenn dieser weniger humoristisch als beissend ist.

      Das mit der Datenbank ist mein Fehler, sorry. Ich dachte die andeutung "$sql=" währe ausreichend.

      Zum Design: es ist absolut nicht mein verschulden, dass ich mit soner Datenbank arbeiten darf, die ist weder von mir entworfen noch wird sie von mir gepflegt. Das script läuft dynamisch und besorgt sich sämtliche Infos über die Datenbank wie z.B. Tabellennamen etc. Darum kanns halt vorkommen, dass es auf irgendeinem System nicht läuft, weil die intelligenten Anwender umbedingt schöne lange spaltenbezeichner mögen mit vielen Leerzeichen.

      Mal am Rande ne Anmerkung: wenn man aus den Tabellen dynamisch Formulare erstellt ist es "optisch" angenehmer ein feld mit Label "Zweiter Vorname" als eins mit "Zweiter_Vorname" zu haben und nein, sämtliche Unterstriche mit Leerzeichen ersetzten zu lassen bei der Ausgabe ist keine Lösung.

      mfg
      Micha

      1. hi,

        vielen Dank für den beissenden Humor... auch wenn dieser weniger humoristisch als beissend ist.

        Was war denn beißend?

        Zum Design: es ist absolut nicht mein verschulden, dass ich mit soner Datenbank arbeiten darf, die ist weder von mir entworfen noch wird sie von mir gepflegt.

        Es ist absolut nicht unser verschulden, irrtümlich das Gegenteil anzunehmen, wenn du kein Wort darüber verlierst.

        Mal am Rande ne Anmerkung: wenn man aus den Tabellen dynamisch Formulare erstellt ist es "optisch" angenehmer ein feld mit Label "Zweiter Vorname" als eins mit "Zweiter_Vorname" zu haben und nein, sämtliche Unterstriche mit Leerzeichen ersetzten zu lassen bei der Ausgabe ist keine Lösung.

        Mal am Rande 'ne Anmerkung: Warum sollte man eine Formularbeschriftung aus den Spaltennamen in der Datenbank "herleiten" wollen?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Salut,

        Das mit der Datenbank ist mein Fehler, sorry. Ich dachte die andeutung "$sql=" währe ausreichend.

        "sql" ist ein Sprachdialekt, der von vielen verschiedenen Datenbank-
        systemen mit unterschiedlich(em|grossem) Wortschatz benutzt wird.
        PostgreSQL, mySQL, MS (T-)SQL, Oracle, ... also war deine Angabe
        wenig ausreichend eindeutig. Und "w_ä_re" kommt nicht von "wahr".

        Zum Design: es ist absolut nicht mein verschulden

        Du warst's nicht, ich war es nicht, wahsaga auch nicht. Aber irgend-
        wer hat dieses Verbrechen mit den Leerzeichen im Spaltennamen ja
        doch begangen?

        Mal am Rande ne Anmerkung: wenn man aus den Tabellen dynamisch Formulare erstellt ist es "optisch" angenehmer ein feld mit Label "Zweiter Vorname" als eins mit "Zweiter_Vorname" zu haben und nein, sämtliche Unterstriche mit Leerzeichen ersetzten zu lassen bei der Ausgabe ist keine Lösung.

        Noch ne Anmerkung (ganz) am Rande: Sehr schlecht durchdachtes Design
        (woran du aber keine Schuld haben musst, es aber dennoch ändern
        kannst). Das von dir beschriebene Problem mit Labels für
        Eingabefeldern ist ein hübsches Beispiel wie wieder die völlig
        falschen Mittel für den falschen Zweck verwendet worden sind ->
        Frickelsoftware?

        Eine bessere Lösung, wäre, die Texte für Beschriftungen und ähnliches
        zwar auch in der DB aber als Resourcen-Datensätze aufzubewahren, wenn
        es schon so generisch sein soll. Wenn nämlich mal einer von deinen
        intellenten Benutzern auf die Idee kommt, es müsse "Weitere Vornamen"
        als Label dastehen, dann ändert ihr den Spaltennamen (??) und müsst u.U.
        viele viele andere Abfragen wieder geradefrickeln.

        Du hast dem Forum auch noch nicht deine Fehlermeldung mitgeteilt.
        Habe mal gehört, das soll ganz hilfreich sein um den Fehler zu
        beseitigen. Hinweise, wie Datenbankobjekte geeignet benannt werden
        sollten um Probleme zu vermeiden, wurden ja auch schon mehrfach
        genannt.

        Versuche bitte aus den Design-Fehlern die vor dir liegen zu lernen.

        Ciao, Frank

      3. yo,

        Mal am Rande ne Anmerkung: wenn man aus den Tabellen dynamisch Formulare erstellt ist es "optisch" angenehmer ein feld mit Label "Zweiter Vorname" als eins mit "Zweiter_Vorname" zu haben und nein, sämtliche Unterstriche mit Leerzeichen ersetzten zu lassen bei der Ausgabe ist keine Lösung.

        das gibt es aber eine elegante lösung dafür, indem man einen alias namen beim select mit angibt oder aber eine view erstellt. das löst beide probleme sehr zufriedendstellend.

        Ilja

        1. hi,

          das gibt es aber eine elegante lösung dafür, indem man einen alias namen beim select mit angibt

          Aber auch dabei dürfte ja (bei MySQL zumindest) an den Backticks um diesen Aliasnamen kein Weg vorbeiführen, wenn dieser dann das Leerzeichen enthalten soll.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. yo,

            Aber auch dabei dürfte ja (bei MySQL zumindest) an den Backticks um diesen Aliasnamen kein Weg vorbeiführen, wenn dieser dann das Leerzeichen enthalten soll.

            das sicherlich nicht, aber es lößt das problem mit der dynamisch ausgegeben spaltennamen und der problematik, keine leerzeichen in den spaltennamen zu verwenden.

            Ilja