Announcement

Collapse
No announcement yet.

Kopieren von SQL-Resource

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kopieren von SQL-Resource

    Moin,

    ich versuche mal die Situation qualitativ zu skizzieren...

    1. Ich habe eine Klasse (das Objekt nennen wir mal $sql_temp), die, was verschiedene "resource() of type (mysql result)" speichern kann. Insgesamt vier, hier im BSP mit zwei Ergebnissen von unterschiedlichen SQL-Anfragen (die sich weder schachteln noch kombinieren lassen).

    wenn ich jetzt folgendes mache (clone ist in $sql_temp default):

    $copy_resources = clone $sql_temp;

    geht das:

    while($result = mysql_fetch_object($sql_temp->resource1))
    {
    echo $result->prop;
    }

    aber wenn ich irgendwann später im gleichen Zug, nachdem obriges ausgeführt wurde versuche:

    while($result = mysql_fetch_object($copy_resources->resource1))
    {
    echo $result->prop;
    }

    wird er die Schleife ohne Ausgabe abbrechen. Obwohl ich bei var_dump($copy_ressources->ressource1); sowas, wie z. B. "resource(4) of type (mysql result)" stehen habe...

    2. Es würde auch nicht gehen, wenn ich sowas mache:

    $resource1 = SELECT *...
    $resource2 = SELECT * ....

    $resources = Array('resource1' => $resource1, 'resource2' => $resource2);

    foreach($resources as $key => $value)
    {
    $copy_resources[$key] = $value;
    }

    ... danach 2x mysql_fetch_object, oder 2x mysql_fetch_assoc oder 2x mysql_fetch_row...

    --------

    An der ganzen Geschichte wundert mich, dass er bei var_dump($copy_resources['resource1']) sehr wohl sowas, wie z. B. "resource(4) of type (mysql result) ausgeben würde....

    ---------

    Deswegen kam ich auf die Idee mit der "tiefen" Kopie.. Klappt aber nicht -.- Das ganze würde nur klappen, wenn ich die SQL-Anfragen doppelt schreibe.. Das ist aber nicht Sinn der Sache?

    Grüße

    EDIT: Hintergrund der Geschichte ist eine "Browserweiche" für Brower mit JavaScript und für Browser ohne. Muss ohne get_browser() und dummy-Requests, einzig und allein mit dem <noscript>-Tag implementiert werden. Deswegen sind auch zwei identische Abfragen erforderlich. Da die SQL-Statements mit Joins etc. arbeiten würde ich es vorziehen eine Kopie vom Ergebnis zu machen, wegen Serverlast.

  • #2
    Hallo,
    Originally posted by cla View Post
    ...Deswegen kam ich auf die Idee mit der "tiefen" Kopie.. Klappt aber nicht -.-
    Das ist auch nicht verwunderlich, da das letztendliche fetchen des Cursors nichts mit deinem (geklonten) Objekt zu tun hat, sondern lediglich von der darin enthaltenen MySQL-Resource abhängt und diese lässt sich nicht einfach kopieren.
    Originally posted by cla View Post
    ...
    Das ganze würde nur klappen, wenn ich die SQL-Anfragen doppelt schreibe..
    ...oder das Ergebnis beim ersten Fetchen - z.B. in einem Array - zwischenspeicherst.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Moin Falk,

      danke für die Antwort. Ja, bin inzwischen auch auf die Idee gekommen zu recherchieren, was "resource() of type (mysql result)" überhaupt ist, ferner dass man es nicht clonen kann.

      Habe jetzt sowas ähnliches gemacht, wie Du vorgeschlagen hast. Hinter der ganzen Geschichte verbirgt sich eine Javascript-Browser-Weiche, die ohne asnchrones JS, bzw. fake-Requests auskommt. Leider geht auf den Servern get_browser() nicht, und der Provider antwortet nicht...
      Es wird ein (eigentlich vier) Menü(s) zusammengebastelt (mehrere SQL-Tabellen, queries, Joins, das volle Programm).
      Dieser Menü-String wird später mit json_encode an eine JS-Variable übergeben und an die richtige Stelle geschrieben. Darunter ein noscript-Tag. Bevor der Menü-String überhaupt ausgegeben wird, wird er kopiert, gesplittet, modifiziert, zusammengekittet und danach erst an beide (Ausgabe-)Stellen gegeben. Funktioniert prima. Aber das Menü steht halt 2x im Quelltext...

      Comment

      Working...
      X