mysqladmin und unserialize()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysqladmin und unserialize()

    ich habe folgendes problem:
    wenn ich ein serialisiertes objekt als text in mysql speichere und dann normal auslese und wieder entserialisiere, dann ist alles ok.
    wenn ich aber im serialisierten objekt über mysqladmin nur eine einzige stelle ändere (z.b. die jahreszahl eines datums), dann kann ich es nicht mehr deserialisieren und bekomme einen "error at offset..." fehler bei unserialize(). der offset ist nicht die stelle, an der ich etwas geändert habe.

    die frage ist also: was verändert mysqladmin an dem gespeicherten string, dass man ihn nicht mehr entserialisieren kann? der string ist in seiner äußeren struktur nicht geändert, nur eine einzige inhaltliche änderung reicht aus, damit unserialize() nicht mehr funktioniert.

  • #2
    Ist der Offset vielleicht der Indikator für die Jahreszahl?
    Beim serialisieren wird doch aus "6.3.2006" s:8:"6.3.2006". Wenn du daraus s:8:"10.3.2006" machen willst, mußt du aus der 8 eine 9 machen ... der String ist ja länger geworden.

    Aber warum willst du an serialisierten Objekten manuell rumfummeln? Schlecht programmiert?

    Falls es doch unumgänglich ist, kannst du dir auch ein kleines Script schreiben, dass alle Objekte aus der DB holt, unserialized, die Properties ändert und serialized zurückschreibt.

    Kommentar


    • #3
      hi onemorenerd,

      vielen dank für deine antwort.
      die jahreszahl wird bei mir trotz serialisieren mit führenden nullen gespeichert, z.b. s:19:"2006-03-10 21:51:08". das datum selber ist auch nicht speziell das problem. es ist egal, wo man änderungen durchführt.

      ich möchte an den objekten manuell rumfummeln, weil es sich um shopbestellungen handelt und es vorkommt, dass jemand anruft und sagt "ich habe mich in der farbe eines t-shirts geirrt, bitte mal ändern!"
      der aufwand, ein formular für änderungen aller details aller artikel zu schreiben, ist mir zu gross.

      vielen dank für das angebot, mir ein kleines skript zu schreiben. wie würde das denn das objekt unserialisieren, wo doch genau das das problem ist?

      zur weiteren info: ich benutze mysql 4.0.20 und php 5.0.3.


      ich werde mal forlgende idee versuchen: objektstring aus der datenbank lesen, in eine textdatei speichern, dort auslesen und dann entserialisieren. wie gesagt ist der string ja syntaktisch korrekt.

      Kommentar


      • #4
        Original geschrieben von mael15
        ich möchte an den objekten manuell rumfummeln, weil es sich um shopbestellungen handelt und es vorkommt, dass jemand anruft und sagt "ich habe mich in der farbe eines t-shirts geirrt, bitte mal ändern!"
        der aufwand, ein formular für änderungen aller details aller artikel zu schreiben, ist mir zu gross.
        Scheint ja echt auf professionellem Niveau zu laufen ...

        (Aber gut, wer Bestelldaten abspeichert, in dem er ein serialisiertes Objekt in die DB knallt ...)
        wie würde das denn das objekt unserialisieren, wo doch genau das das problem ist?
        Ganz einfach: Ohne dass du daran rumfummelst.
        unserialize, Änderung an den Daten ordentlich per Script gemacht, wieder serialisiert und zurückgeschrieben.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          hi wahsaga,

          was wäre deiner meinung nach ein professionalles vorgehen?
          alle inhalte des objektes auflösen und in separate datenbank felder speichern? -> viel zu aufwändig
          serialisiert in eine textdatei speichern? -> viel zu langsam
          garnicht speichern kommt auch nicht infrage

          ich brauche eben jedes detail der bestellung für spätere auswertung. mir war bisher nicht bekannt, dass serialisierte objekte in datenbanken probleme machen können.

          rumgefummelt an den daten habe ich schon, um dieses problem geht es.

          Kommentar


          • #6
            Original geschrieben von mael15
            was wäre deiner meinung nach ein professionalles vorgehen?
            Ein der Aufgabe angemessenes.
            alle inhalte des objektes auflösen und in separate datenbank felder speichern? -> viel zu aufwändig
            Wenn du den (idR.) vernünftigsten aller Wege nicht gehen willst - dann sehe ich nicht, wo man dir noch helfen können sollte.
            rumgefummelt an den daten habe ich schon, um dieses problem geht es.
            Dann hast du ja hoffentlich wenigstens noch ein nicht-manipuliertes Backup? (Oder die Unprofessionalität übersteigt die Befürchtungen noch ... )
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              hat jemand vielleicht noch eine idee zur lösung des problems?

              Kommentar

              Lädt...
              X