Ich habe die Fragen durchgesehen und Folgendes festgestellt:
SELECT prodid, issue
FROM Sales
WHERE custid = @custid
AND datesold = SELECT MAX(datesold)
FROM Sales s
WHERE s.prodid = Sales.prodid
AND s.issue = Sales.issue
AND s.custid = @custid
Ich habe mich gefragt, was das "@" vor custID macht. Ist es nur eine Möglichkeit, die custID aus der ausgewählten Tabelle zu referenzieren?
Antworten:
Die @CustID bedeutet, dass es sich um einen Parameter handelt, für den Sie später in Ihrem Code einen Wert angeben. Dies ist der beste Schutz vor SQL-Injection. Erstellen Sie Ihre Abfrage mithilfe von Parametern, anstatt Zeichenfolgen und Variablen zu verketten. Das Datenbankmodul setzt den Parameterwert dort, wo sich der Platzhalter befindet, und es besteht keine Chance für eine SQL-Injection.
quelle
@CustID
durch eine Zeichenfolge ersetzt wird. Wenn diese Datenbank eine dieser Variablen empfängt, weiß sie, dass sie der Variable für nichts in ihr entkommen kann.@ wird als Präfix verwendet, das Namen gespeicherter Prozeduren und Funktionsparameter sowie Variablennamen angibt
quelle
Möglicherweise sind Sie an die MySQL-Syntax gewöhnt: Microsoft SQL
@
ist mit MySQL identisch?
quelle
Es ist ein Parameter, den Sie definieren müssen. Um SQL Injection zu verhindern, sollten Sie alle Ihre Variablen als Parameter übergeben.
quelle
Sie sprechen über die Art und Weise, wie eine parametrisierte Abfrage geschrieben wird. '@' bedeutet nur, dass es sich um einen Parameter handelt. Sie können den Wert für diesen Parameter während des Ausführungsprozesses hinzufügen
quelle
publish data where stoloc = 'AB143' | [select prtnum where stoloc = @stoloc]
So funktioniert das
@
.quelle
@
funktioniert.@
gefolgt von einer Zahl sind die Parameter in der Reihenfolge, in der sie in einer Funktion aufgelistet sind.quelle