MySQL: affected_rows treibt mich in den Wahnsinn
Joerg Rossdeutscher <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <1101762214.3638.31.camel@ratti> |
Moin,
folgendes ist das Problem:
Per php möchte ich in MySQL
- den Wert eines Feldes ÄNDERN, wenn es bereits existiert,
- oder einen entsprechenden Datensatz HINZUFÜGEN, wenn das Feld
noch nicht exisitierte.
Sprich, auf gut hochdeutsch: Hinterher soll da stehen:
Eindeutige ID: 13
Name: Ratti
...egal, ob es die "13" vorher schon gab und welchen Wert "Name" hatte.
Mein Problem: Es soll auch dann klappen, wenn beides bereits vorher
exakt so vorhanden war!
Ich habe sowas im Einsatz, Pseudocode, ungequotet:
UPDATE SET name="ratti" WHERE id=13
if mysql_affected_rows == 0 {
INSERT SET name="ratti" , id=13
}
Das klappt in allen Fällen - AUSSER, wenn der Datensatz vorher schon
genau so aussah, denn affected_rows meldet nur die tatsächlich
veränderten Datensätze zurück (Bin ich alleine mit der Meinung, daß das
total bescheuert ist?). In diesem Fall bekomme ich eine 0 geliefert, der
nächste Befehl liefert mir dann einen Fehler, weil die id als UNIQUE
deklariert ist - was auch korrekt ist.
Da die Datenbank sehr groß ist, kommt es nicht in Frage, vorher mit
SELECT die Werte auszugraben und zu gucken, was man tun muß.
Da das ganze auch auf älteren Distris laufen soll, kommt ebenfalls nicht
in Frage INSERT ... ON DUPLICATE KEY UPDATE zu verwenden, weil das ab
MySQL 4.1 und somit zu neu ist.
Für REPLACE finde ich leider nicht heraus, seit wann das drin ist - und
ehrlich gesagt, ich begreife nicht, was genau es denn nun ersetzt und
was nicht.
Gruß und Danke,
Ratti
--
-o) fontlinge | Fontmanagement for Linux | Schriftenverwaltung in Linux
/\\ http://freshmeat.net/projects/fontlinge/
_\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/
signature.asc
(application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) iD8DBQBBq46mCGbv12v1ACwRAh+IAJ4lyFwMggPRLdATa+4uWMcsoZ6MwQCeMAx7 kB5vHeurFRTjbo1pH67u1fY= =9Dkl -----END PGP SIGNATURE-----