Seite 1 von 2

Migration schreiben von "

Verfasst: 19.09.2021 20:59
von IMC
Hallo,
ich habe jetzt meine erste Extension mit Zugriff auf die DB fertig gestellt.
Dabei ist mir aufgefallen das beim Schreiben mit update_data() array('config.add', array('imcger_...', '"zoom"')) Anführungszeichen mit einem Backslash maskiert werden \".
Schreibe ich den selben String aus dem Formular des ACP, wird das Anführungszeichen nicht maskiert. Dies ist kein Problem, ich bin nur verwundert.

Ist dieses unterschiedliche Verhalten normal/gewollt? bzw. kann man dies beeinflussen?
mySQL 5.7
phpBB 3.3.5 RC1

Re: Migration schreiben von "

Verfasst: 19.09.2021 21:16
von Dr.Death
Dafür müssten wir schon mehr von deinem geschrieben Code an einem Stück sehen, um das beurteilen zu können.

Du könntest es auch so schreiben:

Code: Alles auswählen

update_data() 
['config.add', ['imcger_...', 'zoom']]
Dann wird dem key imcger_... dem Value zoom zugewiesen.

Musst Du (aus welchem Grund auch immer) den Value "zoom" zuweisen wollen, dann sind die " zu maskieren.

Re: Migration schreiben von "

Verfasst: 19.09.2021 22:30
von IMC
Ich habe eben etwas getestet.
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', "\"zoom\"")), String in DB \"zoom\"
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', '\"zoom\"')), String in DB \\\"zoom\\\"
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', '"zoom"')), String in DB \"zoom\"
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', ""zoom"")), String in DB \"zoom\"

Ich war davon ausgegangen das ich die Zeichen nicht maskieren brauche wenn ich sie in einfache Anführungszeichen setze und war überrascht das die Markierung automatisch hinzugefügt wurde. Auf jeden Fall habe ich an der Stelle wieder etwas dazugelernt.

Re: Migration schreiben von "

Verfasst: 19.09.2021 22:40
von Dr.Death
Gegenfrage:

Warum muss in der Datenbank das zoom in Anführungszeichen gesetzt werden ?
Was möchtest du damit bezwecken?

Es wird so oder so als "String" in die DB eingetragen.

Wenn später die Anführungszeichen zwingend bei der Verarbeitung / Ausgabe benötigt werden, kann man sie später leichter hinzufügen, als sie beim einarbeiten in die DB extra zu maskieren.

Re: Migration schreiben von "

Verfasst: 19.09.2021 22:42
von chris1278
Hi Imc also ich bin jetzt nicht wirklich spezialist was das angeht bin selber noch am lernen aber mal ein paar beispiele vond em was ich nutze:

In long und short array:


Also bei zahlen bool werten also die true/false abfragen:
normal also mit array geschrieben:

Code: Alles auswählen

array('config.add', array('variable_name', 0)),

Code: Alles auswählen

['config.add', ['variable_name', 1]],
Und hier beide Varianten für strings zu schreiben:

Code: Alles auswählen

array('config.add', array('variable_name', 'wert schreiben oder leer lassen wenn keine vorgabe haben willst')),

Code: Alles auswählen

['config.add', ['variable_name', 'wert schreiben oder leer lassen wenn keine vorgabe haben willst']],
Wenn du buchstaben und zahlen gemicht übers acp an das template geben willst dann solltest du die String variante nutzen die einfüge option mittels 0 oder 1 sinnvoll wenn man aus zwei sachen auswählen kann z.B. funktion ist aktiviert ja/nein.

Ansosnte kannst du in der datenbank auch das zwichen den beiden hochkommas freilassen. Der wert wird dann über das acp modul dort eingetragen.

z.B. so

Code: Alles auswählen

array('config.add', array('variable_name', '')),
Dann wird der Eintrag in der phpbb_config angelegt aber ohne inhalt. Diesen kannst du dann später in deinem Modul einfügen.

Re: Migration schreiben von "

Verfasst: 19.09.2021 22:45
von Dr.Death
Chris, stop mal bitte.

Es geht hier erstmal um die Frage ob die Anführungszeichen wirklich benötigt werden oder nicht.

Warte bitte mal die Antwort ab.... ich glaube schon, daß IMC weiß wie der Code zu schreiben ist.

Re: Migration schreiben von "

Verfasst: 19.09.2021 22:47
von chris1278
Dr.Death sorry ich hatte das geschrieben und während ich das geschrieben habe hast du schon geantwortet.

Re: Migration schreiben von "

Verfasst: 19.09.2021 22:56
von IMC
Dr.Death hat geschrieben: 19.09.2021 22:40 Wenn später die Anführungszeichen zwingend bei der Verarbeitung / Ausgabe benötigt werden, kann man sie später leichter hinzufügen, als sie beim einarbeiten in die DB extra zu maskieren.
Genau so habe ich es jetzt gelöst. Mit den ursprüngliche Plan die Anführungszeichen mit in der DB zu speichern wollte ich Programmcode sparen.
Das steckt noch von früher in mir drin als die Rechner noch langsamer waren.

Re: Migration schreiben von "

Verfasst: 19.09.2021 23:13
von Dr.Death
Ja, das "Maskieren" ist mehr Arbeit, besonders bei einem Code Review muss man erstmal alles doppelt begutachten....gilt das jetzt als Maskiert oder nicht ? Doppelte Maskierung \\, Dreifache \\\ usw. das verwirrt oft.

Da ist es einfacher, nach dem "Auslesen" einfach das Ergebnis wieder mit " umschliessen.

Ansonsten wäre das der richtige Weg gewesen: ( egal ob short oder long array schreibweise )
Werte in einem Array sollten mit Single Quotes umgeben sein.

Code: Alles auswählen

array('config.add', array('imcger_fancybox3_toolbar_button_zoom', '"zoom"'))
String in DB \"zoom\"

Re: Migration schreiben von "

Verfasst: 21.09.2021 12:38
von LukeWCS
IMC hat geschrieben: 19.09.2021 22:56 Genau so habe ich es jetzt gelöst. Mit den ursprüngliche Plan die Anführungszeichen mit in der DB zu speichern wollte ich Programmcode sparen.
Das steckt noch von früher in mir drin als die Rechner noch langsamer waren.
Dafür hättest du jedoch mehr Aufwand, wenn du den String an anderer Stelle ohne Anführungszeichen bräuchtest. Der Programmcode zum hinzufügen der Anführungszeichen kann dann z.B: so aussehen.

Code: Alles auswählen

$src = 'zoom';

$out1 = "\"$src\"";
$out2 = '"' . $src . '"';
$out3 = sprintf('"%s"', $src);
Das sind mal 3 Varianten. Oder direkt an der Stelle definieren, die den Wert schlussendlich ausgibt.

Bezüglich Geschwindigkeit brauchst dir da keinen Kopf machen. Solch triviale Vorgänge erledigt der Interpreter derart schnell, dass du solche Aktionen schon zig tausendfach ausführen müsstest, bevor man überhaupt mal anfangen kann über Verarbeitungsdauer zu sprechen bzw. bevor man anfangen müsste sich über sowas wie Optimierung Gedanken zu machen. Auch die Wahl der PHP Version beeinflusst die Leistung. PHP 7 ist z.B. um einiges performanter als PHP 5.