4 Stimmen

mySQL gespeicherte Prozedur where-Klausel Problem

Ich habe eine mySql gespeicherte Prozedur, die wie folgt aussieht.

delimiter |
create procedure GetEmployeeById(in ID varchar(45))
begin
  select id,
      firstName,
      lastName,
      phone,
      address1,
      address2,
      city,
      state,
      zip,
      username,
      password,
      emptypeid
  from myschema.tblemployees t
  where
      t.id=ID limit 1;
end |
delimiter;

Wenn ich nicht die Begrenzung 1 in Ort haben, gibt es immer alle Zeilen in der Tabelle--mit jedem Datensatz id Wert auf den Parameter ID festgelegt. Warum kann ich nicht einfach where id=ID verwenden, und warum werden alle Datensätze zurückgegeben, wenn ich das tue? Welche Auswirkungen hat es, wenn ich limit 1 verwende? Warum programmiere ich an einem Samstagabend?

9voto

MarkR Punkte 60862

Denn es vergleicht t.id mit sich selbst, was immer der Fall sein wird. Nennen Sie Ihren formalen Parameter etwas anderes.

4voto

Rob Kennedy Punkte 158781

Bei Spaltennamen in MySQL wird nicht zwischen Groß- und Kleinschreibung unterschieden. Die id Spalte in Ihrer Abfrage versteckt der Parameter namens ID so dass Ihr where Klausel in Wirklichkeit zwei verschiedene Ausdrücke verwendet, um auf dieselbe Spalte zu verweisen. Und natürlich ist der Wert einer Spalte immer gleich sich selbst, so dass alle Datensätze übereinstimmen. Verwenden Sie einen anderen Namen für den Eingabeparameter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X