wert MySQL: Wenn der Name der gespeicherten Prozedur mit dem Namen der Tabellenspalte übereinstimmt




php mysql tabelle ausgeben (4)

Die Verwendung von Backticks in der MySQL-Abfragesyntax ist hier dokumentiert:

http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

Also ja, dein erstes Beispiel (mit Backticks) ist korrekt.

Angenommen, wir haben eine gespeicherte Prozedur SetCustomerName, die einen Eingabeparameter Name hat, und ich habe eine Tabelle Kunden mit Spalte Name. In meiner gespeicherten Prozedur möchte ich den Namen des Kunden angeben. Wenn ich schreibe

UPDATE customers SET Name = Name;

Das ist falsch und ich sehe 2 andere Möglichkeiten:

UPDATE customers SET Name = `Name`;
UPDATE customers SET customers.Name = Name;

Das erste funktioniert, aber ich habe in der Dokumentation nicht gefunden, dass ich Parameter in `Zeichen verpacken kann. Oder habe ich es in der Dokumentation vermisst (Link wird in diesem Fall geschätzt).

Welche anderen Möglichkeiten gibt es und wie ist der Standard für einen solchen Fall? Das Umbenennen des Eingabeparameters ist nicht gut für mich (weil ich automatische objekt-relationale Zuordnung habe, wenn Sie wissen, was ich meine).

AKTUALISIEREN:

Also, es gibt einen Link über Backticks ( http://dev.mysql.com/doc/refman/5.0/en/identifiers.html ), aber es ist nicht tief genug erklärt, wie man sie benutzt (wie man sie mit Parametern und Spalten verwendet) Namen).

Und es ist eine sehr seltsame Sache (zumindest für mich): Sie können Backticks in beide Richtungen verwenden:

UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;

und sie arbeiten alle auf die gleiche Weise.

Denkst du nicht, das ist seltsam? Wird dieses seltsame Verhalten irgendwo erklärt?


Der einfachste Weg, um zwischen Ihrem Parameter und der Spalte zu unterscheiden (wenn beide Namen gleich sind) besteht darin, den Tabellennamen in Ihrem Spaltennamen hinzuzufügen.

UPDATE customers SET customers.Name = Name;

Sie können auch Datenbank-Präfix wie hinzufügen

UPDATE yourdb.customers SET yourdb.customers.Name = Name;

Durch Hinzufügen des Datenbanknamens können Sie Aktionen für mehr als eine Datenbank aus einer einzelnen Speicherprozedur ausführen.


Ich denke, dein erstes Beispiel ist eigentlich rückwärts. Wenn Sie versuchen, die Spalte "Name" auf den Eingabeparameter "Name" zu setzen, sollte dies meiner Meinung nach Folgendes sein:

UPDATE customers SET `Name` = Name;

Und für das zweite Beispiel können Sie Tabellenaliase auf dieselbe Weise wie in allen anderen Anweisungen festlegen:

UPDATE customers AS c SET c.Name = Name;





parameters