Subquery im Update Statement
Tobias (unreg)
- datenbank
Hallo,
ich habe die MySQL Versionen 4.1 und 5.0, beide wollen mir aber das folgende Statement nicht durchführen.
UPDATE `nachrichten`
SET `nachrichten`.`titel` = 'Neuer Titel',
SET `nachrichten`.`benutzer_nr` = (SELECT `benutzer`.`id` FROM `benutzer` WHERE `benutzer`.`name` LIKE 'Name'),
SET `nachrichten`.`inhalt` = 'Überarbeiteter Inhalt'
WHERE `nachrichten`.`id` = 3;
Die Fehlermeldung sagt mir nur, dass der Fehler in Zeile drei liegt, also hochwahrscheinlich mit dem Subquery zu tun hat. Allerdings verstehe ich nicht warum. Und die Documentation will mir das auch nicht erklären.
Bitte klärt mich auf :)
Hi,
UPDATE nachrichten
SET
nachrichten
.titel
= 'Neuer Titel',
SETnachrichten
.benutzer_nr
= (SELECTbenutzer
.id
FROMbenutzer
WHEREbenutzer
.name
LIKE 'Name'),
SETnachrichten
.inhalt
= 'Überarbeiteter Inhalt'
WHEREnachrichten
.id
= 3;
`mein` `Gott`, `Du` `hast` `wohl` `einen` `Backtick`!
Im Ernst: Könntest Du bitte erklären, welchen Nutzen Du in dieser Sonderzeicheninvasion siehst? Das "LIKE" bei einer augenscheinlichen Gleichheitsprüfung wäre ebenfalls erklärungsbedürftig.
> Die Fehlermeldung sagt mir nur, dass der Fehler in Zeile drei liegt,
Mir sagt sie das nicht, was aber vermutlich daran liegt, dass ich sie nicht kenne. Könntest Du mich diesbezüglich bitte unterstützen?
Cheatah
--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Hallo,
Im Ernst: Könntest Du bitte erklären, welchen Nutzen Du in dieser Sonderzeicheninvasion siehst? Das "LIKE" bei einer augenscheinlichen Gleichheitsprüfung wäre ebenfalls erklärungsbedürftig.
Naja, ich dachte das soll man so machen, damit eventuelle Schlüsselwörter keine Fehler verursachen.
Mir sagt sie das nicht, was aber vermutlich daran liegt, dass ich sie nicht kenne. Könntest Du mich diesbezüglich bitte unterstützen?
Selbstverständlich.
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET nachrichten
.benutzer\_nr
= (SELECT benutzer
.id
FROM `benutzer WHER' at line 3
Tobias
hi,
Das "LIKE" bei einer augenscheinlichen Gleichheitsprüfung wäre ebenfalls erklärungsbedürftig.
Naja, ich dachte das soll man so machen, damit eventuelle Schlüsselwörter keine Fehler verursachen.
Das ist Unfug.
Vor SQL-Injection schützt dich auch ein LIKE statt eines = kein bisschen.
Behandle die Daten derart, dass sie im aktuellen Kontext keinen Schaden anrichten können, und gut.
gruß,
wahsaga
Hallo,
Das ist Unfug.
Vor SQL-Injection schützt dich auch ein LIKE statt eines = kein bisschen.Behandle die Daten derart, dass sie im aktuellen Kontext keinen Schaden anrichten können, und gut.
Danke, aber darum ging es mir dabei in erster Linie nicht; ich wollte damit nur sichergehen, dass ein UPDATE überhaupt funktioniert.
Aber ich werde es mir für die Zukunft merken.
Tobias
echo $begrüßung;
Die Fehlermeldung sagt mir nur,
Wie lautet die Fehlermeldung?
ich habe die MySQL Versionen 4.1 und 5.0, beide wollen mir aber das folgende Statement nicht durchführen.
[code lang=sql]UPDATEnachrichten
SETnachrichten
.titel
= 'Neuer Titel',
SETnachrichten
.benutzer\_nr
= (SELECTbenutzer
.id
FROMbenutzer
WHEREbenutzer
.name
LIKE 'Name'),
Bei der Unterabfrage können mehrere Datensätze entstehen. Mit SET kann man aber nur einen Wert eintragen. Könnte das die Ursache sein?
Wenn der eigentliche Wert für 'Name' keine Jokerzeichen (% und _) enthält, solltest du zu einem genauen Vergleich ein = verwenden statt des ungenauen LIKE.
echo "$verabschiedung $name";
echo $begrüßung;
Wie lautet die Fehlermeldung?
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET nachrichten
.benutzer\_nr
= (SELECT benutzer
.id
FROM `benutzer WHER' at line 3
Das scheint ohnehin die einzige Fehlermeldung zu sein die MySQL kennt :(
Bei der Unterabfrage können mehrere Datensätze entstehen. Mit SET kann man aber nur einen Wert eintragen. Könnte das die Ursache sein?
Nein, es gibt nur verschiedene Namen.
Wenn der eigentliche Wert für 'Name' keine Jokerzeichen (% und _) enthält, solltest du zu einem genauen Vergleich ein = verwenden statt des ungenauen LIKE.
Ja? Mat hatte mir gesagt ich solle LIKE nehmen, weil es sich um einen String handelt. Aber wie gesagt, die Subquery liefert dennoch nur ein einziges Datenfeld zurück.
Danke schonmal :)
Hi,
du hast da neben den Backticks bei denen das erlaubt ist ein paar sehr viele SETs drin. UPDATE tabelle SET spalte=wert,spalte2=wert2, ... wäre IMHO die richtige Variante.
MfG
Rouven
Hi,
UPDATE tabelle SET spalte=wert,spalte2=wert2, ... wäre IMHO die richtige Variante.
Danke für den Hinweis!
Gruss, Tobias
Hallo nochmal.
du hast da neben den Backticks bei denen das erlaubt ist ein paar sehr viele SETs drin. UPDATE tabelle SET spalte=wert,spalte2=wert2, ... wäre IMHO die richtige Variante.
Jetzt begreife ich; es ist mir wohl beim copy&paste das SET mitgerutscht. Jetzt funktioniert wieder alles, vielen Dank!
Tobias.