Wetzer: '-Zeichen in einem Text

Hallo,

Wenn ich einen Text wie: "An d` Tafel" in eine mysql-Tabelle eingebe, erhalte ich die Fehlermeldung:
Fehler: 1064 Fehlerbeschreibung: 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 'Tafel

Hier die Definition der Tabelle:
$sql = 'CREATE TABLE lehrersprueche (ID INT UNSIGNED NOT NULL AUTO_INCREMENT, spruch TEXT, PRIMARY KEY (ID))';

Grüße
W.

  1. Wenn ich einen Text wie: "An d` Tafel" in eine mysql-Tabelle eingebe, erhalte ich die Fehlermeldung:

    $sql = 'CREATE TABLE lehrersprueche (ID INT UNSIGNED NOT NULL AUTO_INCREMENT, spruch TEXT, PRIMARY KEY (ID))';

    Warum verwendest du nicht einfach das doppelte Anführungszeichen? Taste kaputt? Und an mysql_real_escape_string() hast du sicher auch gedacht?

  2. echo $begrüßung;

    Wenn ich einen Text wie: "An d` Tafel" in eine mysql-Tabelle eingebe, erhalte ich die Fehlermeldung:
    Fehler: 1064 Fehlerbeschreibung: 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 'Tafel

    Dein SQL-Statement ist fehlerhaft. (Wusstest du sicher schon.)

    $sql = 'CREATE TABLE lehrersprueche (ID INT UNSIGNED NOT NULL AUTO_INCREMENT, spruch TEXT, PRIMARY KEY (ID))';

    Der PHP-Code ist für Datenbank-Fehlermeldungen nicht weiter relevant. Auch hat die Tabellenstruktur nichts mit dem Syntax-Fehler zu tun.

    SQL ist eine Text-Schnittstelle. Befehlsbestandteile und Daten werden im selben Text übermittelt. Damit man Befehl und Daten voneinander unterscheiden kann werden Daten besonders gekennzeichnet. Das nennt man quotieren. Und damit man diese Kennzeichnungszeichen auch als Bestandteil der Daten verwenden kann, gibt es bestimmte Zeichenkombinationen, die dann wieder sagen, dass das Begrenzungszeichen als Datenbestandteil angesehen werden soll. Dies nennt man maskieren oder auch escapen.

    Language Structure - Strings

    Da das ` (Backtick) im Befehlsbestandteil-Kontext auch noch eine andere Bedeutung hat (identifier quote character) und MySQL hier darüber stolpert, obwohl es im Textdaten-Kontext keine Sonderbedeutung hat, wirst du wohl deine Textdaten nicht als solche gekennzeichnet haben.

    Neben der Kennzeichnung deiner Textdaten als solche musst du auch dafür Sorge tragen, dass bestimmte Zeichen, wenn sie in den Daten vorkommen, maskiert werden, damit nicht jemand durch Eingabe dieser Begrenzungszeichen dein SQL-Statement durcheinanderbringen kann. PHP kennt dazu die Funktion mysql_real_escape_string() und einen (nicht sehr empfehlenswerten) Automatismus namens Magic Quotes.

    echo "$verabschiedung $name";