dedlfix: "quote()" Problem, kein Insert??

Beitrag lesen

echo $begrüßung;

Aber, warum funktioniert das nicht wenn man das Quote aus dem Query rausnimmt?
$valueroot = $DBO->quote(ROOTDIR);
$DBO->exec("UPDATE configdirectories SET ConfigDirectoriesPath='$valueroot' WHERE ConfigDirectoriesName = 'RootDirectories'");

Lass dir dein Inhalt von $valueroot ausgeben, dann siehst du es vielleicht. Auch durch aufmerksames Lesen meiner vorigen Antwort hätte dir auffallen können, dass quote() bereits die Anführungszeichen drumrum gemacht hat. Du hast nun SET foo=''bar'', was einen Syntax-Fehler ergibt.

Nochmals zur Verständnis was MySQL anbetrifft:
Werden die Backslahses nun von MySQL weg gefiltert oder macht das PHP?

Entfernst du die Transportsicherung und die Verpackung eines Gerätes im Laden oder erst zu Hause? Dir scheint ja immer noch nicht klar zu sein, warum der ganze Schmus mit den Anführungszeichen einerseits und den Backslashes andererseits gemacht wird.

Das gleiche ist ja auch wenn ein String Anführungszeichen hat '
Dann wird nichts in die Spalte eingetragen.
Prüft bzw. verhindert das MySQL selbst?

Werte die Fehlermeldungen aus! Du wirst in dem Fall einen Syntax-Fehler bekommen.

Wenn ich einen Verzeichnispfad in einer MySQL Spalte speichern möchte, dann muss ich es doch mit "addslashes()" machen oder?

Neien! Vergiss addslashes() und nimm die zum DBMS gehörigen Maskierungen. Nochmal zum Mitschreiben: Du hast ein SQL-Statement:

SELECT feld1, feld2 FROM tabelle WHERE feld1 = 'foo bar'

Du hast darin die Befehlsbestandteile SELECT, FROM und WHERE. Du hast weiterhin die Bezeichner tabelle, feld1 und feld2. Und du hast den Wert foo_Leerzeichen_bar. Damit foo bar nicht mit Befehlsbestandteilen oder Bezeichnern verwechselt wird, wird es in Anführungszeichen gesetzt. Wenn nun im Wert Anführungszeichen auftauchen, dann beenden diese diesen. Damit das nicht passiert, werden Anführungszeichen im Wert maskiert. Bei MySQL passiert das durch Voranstellen eines . Da aber auch der Backslash Datenbestandteil sein kann, muss er nun auch maskiert werden, weswegen er nun doppelt vorkommt.
Das ganze Kongomlerat aus Befehl und Daten bekommt nun der MySQL-Server übergeben, der es auszuwerten hat. Er kann nun genau sehen, was was ist, ist happy und macht was draus. Er speichert die Daten aber nicht zusammen mit SQL-Statement, weswegen er für die Datenhaltung sowohl Quotierung als auch Maskierung entfernt. Doch das was er intern macht, kann uns egal sein. Er kann einfach als Blackbox betrachtet werden. Wenn er die Daten nun auf Anforderung wieder rausrücken muss, verpackt er sie nicht in irgendwelchen Befehlstexten. Er kann sie so übertragen, dass keine Quotierungen oder Maskierungen nötig sind.

echo "$verabschiedung $name";