get_results für große Datenmengen

Ich experimentiere ein sehr störendes Problem mit einer benutzerdefinierten SQL-Abfrage. Ich habe eine benutzerdefinierte MySQL-Tabelle namens trading_datas mit 165 Zeilen für 4,4Mo. Ein Feld datas meiner Tabelle ist ein großes serialisiertes Array.

Wenn Sie es auf diese Weise anfordern:

 $querystr = "SELECT item, datas FROM trading_datas"; $result = $wpdb->get_results( $querystr, 'ARRAY_A' ); 

Mein PHP-Skript stoppt und nichts wird direkt nach dieser Zeile wiedergegeben. Beim Abrufen nur eines item funktioniert alles super.

Soll ich mein serialisiertes Array zippen, bevor ich es in die database setze? Irgendeine andere Lösung?

Vielen Dank für Ihre Hilfe!

Solutions Collecting From Web of "get_results für große Datenmengen"

$wpdb sich nicht zum Abrufen großer Datenmengen aus der database. Warum? In Ihrem Fall:

  1. $wpdb->get_results( ... ) – holt alle Ergebnisse gleichzeitig in Ihren Arbeitsspeicher. Das bedeutet, wenn Sie 4 MB, 10 MB oder 50 MB Daten in DB haben, wird alles im Speicher gespeichert (was begrenzt ist, wie Sie wissen).
  2. $wpdb->get_results( ..., ARRAY_A )$wpdb standardmäßig alles als Objekt ab, und wenn Sie ARRAY_A , wird das Array von Objekten in ein Array von assoziierten Arrays konvertiert. Das bedeutet, dass Sie, wenn Sie bereits 4mb 10mb / 50mb 4mb / 10mb 50mb Daten in den Speicher geladen haben, diese 2 oder noch öfter multiplizieren müssen.

Ich nehme an, Ihr Problem besteht darin, dass Sie durch das Skript Speicherbeschränkungen erreichen. Deshalb funktioniert es für ein Ergebnis und funktioniert nicht für alle Ergebnisse. Es gibt eine Problemumgehung für dieses Problem – verwenden mysql_* function ” mysql_* so, wie Sie sie benötigen:

 $result = @mysql_query( "SELECT item, datas FROM trading_datas", $wpdb->dbh ); if ( $result ) { while ( ( $row = @mysql_fetch_array( $result, MYSQL_ASSOC ) ) ) { // do stuff here for each result ... } @mysql_free_result( $result ); }