2016-05-02 14 views
0

Ich habe diese Tabelle:PLS HELP MySql Fehler 1054: Unbekannte Spalte 'Spaltenname' in Feldliste

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(25) NOT NULL, 
    `pass` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 

ich eine gespeicherte Prozedur wie folgt aus:

create procedure uppdateUser(newname varchar(25), newpass varchar(50), newname2 varchar(25), newpass2 varchar(50)) 
    -> begin 
    -> while name=newname && pass=newpass do 
    -> update users set name=newname2, pass=newpass2; 
    -> end while; 
    -> end 

Aber ich erhalte eine Fehlermeldung unknown column name in field list, wenn ich rufe das Verfahren wie folgt aus:

call uppdateUser('marky','mark','ice','cube'); 

ich habe Fragen hier auf Stackoverflow gesucht, aber nicht f Ich habe eine Antwort. Kann mir jemand erklären, was das Problem hier in meiner Abfrage ist und wie man es beheben kann?

+0

Woher weiß die Engine, welcher Name und welcher Pass in 'ist, während Name && pass = newpass 'Ich sehe keine Variablendeklaration für den Namen und gebe Ihre Prozedur weiter. – xQbert

Antwort

0

Ich denke, das Problem ist die Verweise auf name und pass in der while-Bedingung. Diese Referenzen sind nicht gültig. Es gibt keine Prozedurparameter oder Variablen mit diesen Namen.

Es ist nicht klar, was Sie erreichen wollen, aber ich denke nicht, dass es eine while-Schleife gibt.

Es sieht so aus, als ob Sie eine WHERE-Klausel in der UPDATE-Anweisung wünschen. Ohne WHERE-Klausel aktualisiert die UPDATE-Anweisung alle Zeile in der Tabelle. Und das muss nicht mehr als einmal ausgeführt werden.

würde ich die Update-Anweisung erwarten so etwas von der Form sein:

UPDATE users 
    SET name = v_newname 
     , pass = v_newpass 
    WHERE name = v_oldname 
    AND pass = v_oldpass 

Aber noch einmal, ich verstehe nicht wirklich, was Sie erreichen wollen.

Zuerst, erhalten Sie Ihre UPDATE-Anweisung richtig. Ermitteln Sie die tatsächlichen SQL-Anweisungen, die Sie ausführen möchten.

Sobald Sie das haben, können Sie es in eine gespeicherte Prozedur einfügen.

+0

Ich muss alten Namen ändern i oldpass in der Tabelle (wenn es existiert) mit bereitgestellten newname und newpass – 100vla

+0

zum Beispiel, wenn ich marky (name) mark (pass) in der Tabelle habe ich überprüfen, ob es in der Tabelle und wenn existiert es tut dann, um es mit newname2 und newpass 2 – 100vla

+0

Thx @ spencer7593 allot.You half mir, dieses Problem zu lösen und zu verstehen, wo ich wront gegangen bin – 100vla

Verwandte Themen