Ein reserviertes Wort als Variable

  • Moin, bin neu im Forum und habe eine vielleicht zu einfache Frage:

    Folgendes Problem:

    ...
    $name='Oresti';
    $kuerzel='OR';
    $plan="Select Zeit,$kuerzel from Datei where $kuerzel =' ' ORDER BY Zeit ASC";
    $erg2=mysql_query($plan);
    $anz3=mysql_num_rows($erg2);

    Wenn $kuerzel nicht "OR" sondern irgend ein anderes, dann Abfrage ok.
    Bei 'OR' wird Fehler angezeigt in $anz3, weil kein Ergebnis. Scheint am Kuerzel 'OR' als reserviertem Wort zu liegen.

    Wie kann man das Problem lösen? Danke.


  • Darf ich das um eine Erklärung erweitern? Die ` haben in SQL den Gleichen effekt wie die \ in PHP-Strings (mit aussnahme der Escape-Sequenzen wie \n, \t)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Die ` haben in SQL den Gleichen effekt wie die \ in PHP-Strings (mit aussnahme der Escape-Sequenzen wie \n, \t)


    Das ist aber nicht richtig! Mit \ escaped man ein Zeichen und daher gibt es auch keine "schließenden" Backslashes.
    Aus der MySQL-Doku:

    Zitat

    Das Anführungszeichen für Bezeichner ist der Backtick (‘`’):

  • Vielen Dank für die schnellen Antworten. Mein Problem bleibt aber selbst nach der Änderung :$plan="Select
    `Zeit`,
    `$kuerzel`
    from
    `Datei`
    where
    `$kuerzel` =' '
    ORDER BY
    `Zeit` ASC";

    $erg2=mysql_query($plan)..

    denn das Kuerzel 'OR' existiert und kann auch nicht geändert werden. Das : or die ("MySQL-Error: " . mysql_error()); fängt doch nur den Fehler ab, damit nicht erscheint wie bei mir: Warning: mysql_num_rows() expects parameter 1 to be resource,
    oder sehe ich das falsch?

    Danke

  • Baue das Abfangen des Fehlers ein, dann verrät die MySQL, was falsch ist!

  • MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR from sprechtag where OR =''ORDER BY Zeit ASC' at line

    Dieser Fehler kommt dann.

  • Denn ganzen Code des Programms kann ich nicht zeigen, aber ..
    <?

    $plan="Select `Zeit`,`$kuerzel` from sprechtag where `$kuerzel` =''ORDER BY Zeit ASC "; // Kuerzel sind die Lehrer, die dort noch keinen Eintrag haben
    $erg2=mysql_query($plan) or die ("MySQL-Error: " . mysql_error());
    $anz3=mysql_num_rows($erg2);
    print("<table border='1' width='400' align='center'>");
    $spalten=mysql_num_fields($erg2);

    Wenn ich die Felder bzw. das Variable Feld $kuerzel in `` setzte, zeigt er auch bei anderen Kürzeln eine Fehler, dass er z.B. 'BE' nicht finden kann.

    Gruß Joalt

  • auch Leerzeichen ändert nichts. Fehler bleibt. Wenn andere Fieldnamen wie Zeit und kuerzel in `Feldname`, dann wird aucvh bei nicht reservierten Kürzeln der Fehler :Unknown column 'AN ' in 'field list .. gesendet.

    Werde nochmals alles überprüfen. Vielen Dank . Für heute war`s das erstmal. Gruß Joalt

  • Problem erledigt. Hatte Feld auf drei Zeichen aufgebohrt,Kürzel waren aber immer noch zwei Buchstaben. Mit $kuerzel klappte es, außer bei 'OR' mit `$kuerzel` nicht, erst als ich trim($kuerzel) eingab, funktionierte alles, auch das reservierte OR. Danke für die Hilfe.
    Gruß JOALT.