mehrdim. Array -> serialize -> DB -> unserialize

tomtom86

Grünschnabel
Moin moin liebe Gemeinde,

ich habe ein Problem.

Ich versuche nun seit Stunden dieses zu lösen, doch Google und gefühlt alle deutschsprachigen Foren haben mir bisher nicht weiter geholfen.

Nun versuch ich es direkt.

Ich arbeite im Moment an einem Warenkorbsystem, und fasse die Bestellung am Ende, also nach dem Abschluss der Bestellung, in einem Array zusammen. Bzw. wird das während des gesamten Bestellvorgangs schon gemacht. Dieses Array will ich nun in meiner DB speichern, um mir auf der "Admin"-Seite eine Übersicht verschaffen zu können.

Kopiere ich den Datensatz aus der Tabelle heraus, setz es in eine Variable und unserialize(), dann klappt das. Nur nicht mit dem was aus der DB kommt.

Das ganze mache ich mit serialize(). In die Datenbank wird auch das Array korrekt eingetragen. Nun will ich es auslesen und bekomme, egal wie ich es anstelle immer eine Fehlermeldung. Bin ich so blöd, ober hab ich nur was falsch verstanden? Vielleicht kann mir einer helfen.

Anbei der Code:
PHP:
$ergebnis = mysql_query("SELECT bestellung FROM bestellung WHERE bestellnr = 1201300021");
while($row = mysql_fetch_object($ergebnis)){
 $caa = $row;
}
$d = unserialize ($caa);
Variablen sind zum testen kurz gehalten.

Beim eintragen:
PHP:
$bestellung = serialize ($_SESSION['bestellung']);
$timestamp = time();
$datum = date("Y.m.d",$timestamp);
$eintragbestellung = mysql_query("INSERT INTO bestellung (bestellnr, datum, lieferdaten, bestellung) VALUES (' ".$bestellnummer. " ', ' ".$datum." ', ' ".$lieferdaten." ', ' ".$bestellung." ') ");

Fehler: Warning: unserialize() expects parameter 1 to be string, object given in E:.......... on line 30

Eine Alternative wäre es, für alle Daten einzelne Spalten anzulegen, wäre aber nicht absehbar, wie viele Produkte der Kunde bestellt.

Das Array:
Array ( [0] => Array ( [0] => 448573 [1] => XL [2] => 1 [3] => 19.99 ) )

Das serialisierte Array:
a:1:{i:0;a:4:{i:0;s:6:"448573";i:1;s:2:"XL";i:2;s:1:"1";i:3;d:19.989999999999998436805981327779591083526611328125;}}

Ich hoffe ich habe nichts vergessen.

Ach, und bitte weist nicht nochmal darauf hin, das man nur noch MySqli benutzen soll, das hab ich mir mitlerweile genug anhören müssen. Ich will aber erstmal das ganze Grundprinzip verstehen, bevor ich es mir komplizierte mache.

Vielen Dank im Voraus!
 
Warum versuchst du die ganze Zeile in einen Array zu wandeln? Ich würde versuchen nur das Feld bestellung zu wandeln
PHP:
$row = mysql_fetch_object($ergebnis);
// Hier das Feld bestellung auslesen
$caa = $row->bestellung;
$d = unserialize ($caa);
 
Ja.
Du selectest eine/mehrere Zeilen aus der DB.
Jede Zeile die Spalten Bestellnummer, Datum usw.
Das ganze Array, um das es hier geht, ist auch nur eine einzige Spalte (pro Zeile).
Beim Wertabfragen musst du jetzt angeben, welche Spalte du haben willst.

(Dass du im Select sowieso nur eine Spalte abfragst
und der Computer sich dann "denken" könnte, welche du meinst, zählt nicht.
Computer denken nicht mit.)
 
Sieh mal einer an. Ich bin bisher davon ausgegangen, dass wenn ich im SELECT die Spalte angebe, das ich dann auch nur diese verwende. Nun gut. Fehlermeldung ist weg.

Und es scheint zu funktionieren. Danke dafür!

Anbei nochmal der korrekte Code:

PHP:
$ergebnis = mysql_query("SELECT bestellung FROM bestellung WHERE bestellnr = 1201300022");
while($row = mysql_fetch_object($ergebnis)){
 $caa = $row->bestellung;
 }
$d = unserialize ($caa);

print_r ($d);
 
Zurück