Der-Dennis: PDO / MySQL: INSERT- und SELECT- Problem bei serialisierten Obj.

Beitrag lesen

Hallo zusammen,

ich habe ein Problem, bei dem ich nicht weiterkomme. Ich weiß allerdings nicht, ob ich Themenbereich und Betreff richtig gewählt habe, da ich einfach keine Ahnung mehr habe, woran es liegen könnte. Daher bei einer Antwort bitte ändern, wenn es nicht passt.

Zur Ausgangslage: Ein bestendes Projekt soll um ein "Cronjob-Verwaltungs-System" ergänzt werden. Sprich: Es soll nur einen einzigen Cronjob geben, der eine Datei aufruft. Anschließend führt das (PHP-)Skript alle anstehenden Aufgaben aus, wobei eine gegebene Skript-Laufzeit-Begrenzung beachtet wird - es werden also nicht alle, sondern nur so viele Aufgaben wie möglich abgearbeitet.

Zur "Technik": Alle einzelnen, speziellen Aufgaben implementieren ein Interface, welches sie für den Controller ausführbar macht. Dieser Controller wird von dem Cronjob aufgerufen.
Beim erstellen einer neuen Aufgabe wird das Aufgaben-Objekt erstellt, serialisiert und mittels PDO in die Datenbank geschrieben. Dies alles soll eine unbegrenzte Möglichkeit von Aufgaben gewährleisten.

Zum Problem: Es funzt nicht :-) Also:

Mittels folgender Methode werden die Objekte in die Datenbank geschrieben,

  
public function saveSerialized(CronjobModel $cronjob)  
{  
	// Dies folgt in späterer Erläuterung  
	// var_dump($cronjob);  
  
	$db = $this->getDatabase();  
  
	$sql = "INSERT INTO cronjobs(cronjob) VALUES(:cronjob)";  
  
	$query = $db->prepare($sql);  
	$query->bindParam(':cronjob', serialize($cronjob));  
	$query->execute();  
}  

um mittels folgender Methode wieder aus ihr geholt zu werden:

  
public function load()  
{  
 	$db = $this->getDatabase();  
 		  
 	$sql = "SELECT * FROM cronjobs";  
 		  
 	$query = $db->prepare($sql);  
 	$query->execute();  
 		  
 	$queue = array();  
  
 	while ($row = $query->fetchObject()) {  
 		// Dies folgt in späterer Erläuterung  
 		// var_dump(unserialize($row->cronjob));  
  
 		array_push($queue, unserialize($row->cronjob));  
 	}  
 		  
 	return $queue;  
}  

Die Tabelle Cronjobs hat folgenden Aufbau:

  
CREATE TABLE `cronjobs` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `cronjob` text,  
  PRIMARY KEY (`id`)  
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;  

Das eigentliche Problem ist jetzt, dass die beiden var_dump, die ich oben (auskommentiert) beschrieben habe, unterschiedliche (falsche!) Ergebnisse liefern. Schreibe ich CronjobModel A, B und C in die Datenbank (erster var_dump in der saveSerialized-Methode), erhalte ich im zweiten var_dump (in der load-Methode) CronjobModel A, A und A.

Und das kann ich mir überhaupt nicht erklären. Ich schreibe drei verschiedene, serialisierte Objekte in die Datenbank, erhalte aber dreimal das gleiche, zuerst in die Datenbank eingetragene Objekt.

Ich wäre Euch für jede Anmerkung, jeden Hinweis und jede Erfahrung, wo mein Fehler liegt, sehr dankbar!

Sollte ich etwas vergessen haben zu erwähnen, bitte einfach nachfragen.

Vielen Dank und Gruß, Dennis