PHP-MYSQL-UPDATE
Nicole
- php
Hallo erst mal ;-)
Mir stellt sich folgende Frage:
Gibt es ein update query um etwas in eine
Mysql DB nachzutragen, ohne vorher den Inhalt auszulesen?
Klar mit Zahlen ist das einfach:
z.B.
mysql_query("UPDATE personen SET age=age+1;");
aber...
wie ist das mit TEXT ?
Bei Textdatenbanken ist das doch auch ganz einfach,
Dateizeiger auf anfang oder Ende und Text anfügen...
Dann muss das doch bei Mysql erst recht gehen , oder ?
Danke für euere Hilfe
Nikki
Halihallo Nicole
Klar mit Zahlen ist das einfach:
z.B.
mysql_query("UPDATE personen SET age=age+1;");aber...
wie ist das mit TEXT ?
Vielleicht:
UPDATE personen SET beschreibung=CONCAT(beschreibung, 'anzufügender Text')
Anzumerken ist: Das ist _nicht_ im Sinne von MySQL noch SQL ist.
Viele Grüsse
Philipp
Hallo Phillip,
danke für deine Hilfe. Klappt Super ;-)
Aber...
Ein wenig Angst hast du mir schon gemacht:
"... nicht im Sinne mysql..."
Was bedeutet das genau ?
1. Kein Verlass drauf?
2. Inkompalität bei zukünftigen mysql Versionen ?
3. ...?
Würdest du sagen: Besser ist die umständliche Methode,
also select -> mysql_fetch_array() -> str erzeugen,
und dann schlussendlich alter Inhalt + neuer Inhalt
wieder in MySql ?
Danke
Nikki
ps. Wenn ich schon mal Jemanden mit Ahnung vor mir habe:
Kannst du mir sagen welches die gefährlichsten Unterschiede
zwischen den Versionen PHP4.04 und PHP4.3 sind ?
Wollte upgraden, aber habe Angst dass manche Scripte dann
nicht mehr laufen.
Vielleicht:
UPDATE personen SET beschreibung=CONCAT(beschreibung, 'anzufügender Text')
Anzumerken ist: Das ist _nicht_ im Sinne von MySQL noch SQL ist.
Viele Grüsse
Philipp
Halihallo Nicole
"... nicht im Sinne mysql..."
Was bedeutet das genau ?
- Kein Verlass drauf?
Doch. Es ist Verlass darauf.
- Inkompalität bei zukünftigen mysql Versionen ?
AFAIK nein. CONCAT wird ziemlich sicher auch künftig unterstützt, wie auch, dass
der aktuelle Record erst ausgelesen wird und man diesen weiterverarbeiten kann.
Würdest du sagen: Besser ist die umständliche Methode,
also select -> mysql_fetch_array() -> str erzeugen,
und dann schlussendlich alter Inhalt + neuer Inhalt
wieder in MySql ?
Einen Umweg über Scripte würde ich nicht empfehlen, solange die Funktion von MySQL
genügen.
---
Was ich damit sagen wollte:
Der Sinn und Zweck von UPDATE (also Data Manipulation Language) ist es, Daten zu ändern.
Wenn du so willst, vermischst du das UPDATEN mit SELECT, du "befiehlst" der Datenbank,
die Daten zuerst einzulesen und dann Aufgrund dieser Daten etwas zu tun (CONCAT).
Der Sinn von UPDATE besteht jedoch nicht darin, Daten zuerst einlesen zu müssen, UPDATE
ist für das updaten von Records gedacht; die "Funktionalität", dass Daten zuerst ein-
gelesen werden ist ein "Feature", wohl in vielen Datenbanken implementiert, jedoch nicht
im eigentlichen Sinne nötig. Du wirst wohl noch lange nicht (bzw. gar nie, wer weiss),
damit Probleme bekommen, aber eigentlich ist ein UPDATE ein Befehl, der einfach den
Datenbestand der Datenbank ändert; diese Änderung sollte losgelöst von
irgendwelchen "Backticks" (also Zugriff auf bestehende Daten) sein.
Meine Kritik galt der Vermischung zweier Funktionen: Auslesen _und_ Updaten von
Information. Sinnvoller wäre es, die Daten zuerst auszulesen, im Script zu manipulieren
und dann über UPDATE in der Datenbank zu aktualisieren, denn das Script definiert die
Funktionalität, die Datenbank verwaltet nur Daten; dennoch, wenn du eine Funktionalität
(wie das zusammenfügen von Text) über die Datenbank lösen kannst, macht das Sinn, da
das Script viel langsamer ist.
Meine Aussage mochte etwas übertrieben sein, du darfst dieses Verfahren natürlich
forsetzen und wirst wohl nie auf Probleme diesbezüglich treffen.
ps. Wenn ich schon mal Jemanden mit Ahnung vor mir habe:
Kannst du mir sagen welches die gefährlichsten Unterschiede
zwischen den Versionen PHP4.04 und PHP4.3 sind ?
Was meinst du mit gefährlichen Unterschieden?
Wollte upgraden, aber habe Angst dass manche Scripte dann
nicht mehr laufen.
PHP4.3 und PHP4.04 sind weitestgehend kompatibel. Bis auf eine sinnvolle Änderung, die
es zu benennen gilt: register_globals ist jetzt standardmässig "off", folglich kannst
du nicht mehr über den gleichnamigen Variablennamen auf Formulardaten zugreifen, sondern
musst standardisierte Zugriffe verwenden (das ist IMHO eine Änderung, welche zwischen
diesen beiden Versionen stattgefunden hat) :
statt $name, jezt $_POST["name"] oder $_GET["name"]
Viele Grüsse
Philipp
Hallo Phillip,
vielen Dank für deine komplexe Antwort.
Macht schon Spass deine Sachen zu lesen, weil
nicht Fachwort Chinesisch, wie bei vielen Anderen.
Gruss
Nikki
ps. Ja das mit den REGISTER_GLOBALS befürchtete ich
schon. Habe zwar einen eigenen Server, aber nicht viel
Ahnung davon.(So könnte ich REGISTER_GLOBALS auf ON setzen).
So gibts vorinstalliert mehrere PHP versionen,
die ich wahlweise in einer HTTP.conf Datei auswählen kann.
ABER... es gibt keine PHP.ini Datei. Der Support des Servers
sagt zwar ich könnte eine anlegen, aber die können mir
nicht mal sagen wo ich diese hinlege, geschweige denn was
ich alles angeben darf, muss, kann. ;-)
Halihallo Nicole
vielen Dank für deine komplexe Antwort.
Macht schon Spass deine Sachen zu lesen, weil
nicht Fachwort Chinesisch, wie bei vielen Anderen.
Ist das kein Wiederspruch?? ;-)
ps. Ja das mit den REGISTER_GLOBALS befürchtete ich
schon. Habe zwar einen eigenen Server, aber nicht viel
Ahnung davon.(So könnte ich REGISTER_GLOBALS auf ON setzen).
Ich würde dir sehr empfehlen, deine Scripte lieber an register_globals=off anzupassen.
Irgendwann wirst du nicht umherkommen, dich anzupassen. Lieber früher als später!
So gibts vorinstalliert mehrere PHP versionen,
die ich wahlweise in einer HTTP.conf Datei auswählen kann.
ABER... es gibt keine PHP.ini Datei. Der Support des Servers
sagt zwar ich könnte eine anlegen, aber die können mir
nicht mal sagen wo ich diese hinlege, geschweige denn was
ich alles angeben darf, muss, kann. ;-)
Du solltest deinen Anbieter wechseln! :-)
Viele Grüsse
Philipp