MySQL Sitzungsvariable löschen

8

SITUATION: MySQL Query verwendet Wert, von außen geliefert. Dies geschieht durch Deklarieren und Initialisieren einer Sitzungsvariablen, die bis zum Ende der Sitzung gültig bleibt:

%Vor%

FRAGE: Ist es eine gute Übung, die Sitzungsvariable zu löschen, nachdem die Abfrage beendet wurde (aus Sicherheitsgründen)? Was ist der geeignetste Weg, dies zu tun?

STUDIEN: Ich habe den folgenden Vorschlag gefunden, habe aber einige Zweifel, wie es aussieht "nicht initialisieren", nicht wie "undeklarieren":

%Vor%     
Zon 22.07.2014, 20:45
quelle

2 Antworten

8

Die Verwendung von Sitzungsvariablen zum Übergeben von Parametern ist eine schlechte Übung (die Verwendung globaler Variablen weist oft auf den Geruch des Codes hin). Daher gibt es keinen adäquaten oder empfohlenen Weg, um mit Ihrer Situation fertig zu werden.

Sie haben kommentiert:

  

Die Verwendung von Namensparametern ist flexibler als das Platzieren von Parametern mit "?", da das Hinzufügen / Entfernen einer Variablen keine Reihenfolgeänderungen im Code erfordert.

Das ist eine Illusion. Bei diesem Ansatz müssen Sie immer noch "irgendwo" dokumentieren, dass Ihre Prozedur einige Variablen erfordert, bevor Sie sie aufrufen. Dies führt auch zu dem Problem, das Sie angehen möchten.

Auf der anderen Seite ist eine gespeicherte Prozedur (oder eine vorbereitete Anweisung) selbstdokumentierend und die Parameter haben einen bekannten Umfang und eine bekannte Lebensdauer.

Nun, um die spezifische Frage zu beantworten:

  

Wie lösche / lösche ich eine Sitzungsvariable?

SET @id = NULL; ist der einzige Weg zu gehen. Sie können eine Sitzungsvariable nicht deklarieren, da Sie eine Sitzungsvariable nicht deklarieren können (versuchen Sie SELECT @dummy_variable_never_declared_before; ). MySQL-Sitzungsvariablen sind Shell-Umgebungsvariablen sehr ähnlich. (2)

(1) ... außer, wenn Sie sicherstellen, dass die Sitzung abgeschlossen ist, nachdem Sie fertig sind . Beim Schließen der Sitzung werden alle Sitzungsvariablen gelöscht.

(2) Ich habe gelernt, dass Bash-Session-Variablen tatsächlich unscharf sein können .

>     
RandomSeed 23.07.2014 09:52
quelle
1

Ich habe das Handbuch oder irgendetwas nicht gelesen. Aber was ich bei der Verwendung von @ -Variablen gefunden habe, ist, dass sie mit der Datenbankverbindung verschwinden. Ich nehme an, dass Sie eine Sitzung nennen. In jedem Fall scheint die erneute Verbindung mit der Datenbank alle Variablen zu entfernen.
Wenn Sie MySQL mit einem Webserver verwenden, bedeutet dies, dass alle Ihre Variablen gelöscht werden, sobald eine Seite geliefert wurde. So habe ich das herausgefunden. Sie können eine SQL @ -Variable nicht von einem HTTP-Aufruf zu einem anderen halten.

    
user1904991 03.04.2015 18:58
quelle

Tags und Links