Manu: PDO - unbuffered query

Hallo zusammen,

ich habe ein merkwürdiges Problem mit PDO:
Ich fetche einzelne Tabellenzellen und führe in der while-Schleife eine weitere Query aus, um mein array zu komplettieren (einen join kann ich hier nicht verwenden). Soweit so gut. Nun habe ich das Projekt inkl. DB auf meinen Schleppi ausgecheckt (svn) und bekomme die Meldung "Cannot execute queries while other unbuffered queries are active" usw. Ich war erst einmap baff - wieso klappt das auf meinem Entwicklungsrechner und auf dem Notebook nicht?

Als Workaround habe ich folgendes eingefügt, aber ganz zufrieden bin ich damit nicht (ich habe den Eindruck, damit die Performance ziemlich zu drücken):
$dbh = new PDO(’mysql:host=localhost;dbname=test’, ‘root’, ”
,array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

Hat jemand vielleicht eine Idee, warum dem so ist?

Gruß,
Manu

  1. echo $begrüßung;

    "Cannot execute queries while other unbuffered queries are active" usw. Ich war erst einmap baff - wieso klappt das auf meinem Entwicklungsrechner und auf dem Notebook nicht?

    Vielleicht hast du unterschiedliche PHP-Versionen auf den beiden Rechnern. Möglicherweise wurde die Default-Einstellung unten genannten Attributes zwischen zwei Versionen umgestellt.

    Als Workaround habe ich folgendes eingefügt, [...]:
    $dbh = new PDO(’mysql:host=localhost;dbname=test’, ‘root’, ”
    ,array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

    (Deine Anführungszeichen sind nicht original.)

    Hat jemand vielleicht eine Idee, warum dem so ist?

    Nach einem Query mit Ergebnismenge mus diese zuerst komplett vom Server abgeholt werden, bevor eine neue Anfrage an den Server gestellt werden kann. Der Buffered-Query-Modus macht das im Hintergrund, was natürlich nicht ohne Zwischenspeicherung vonstatten gehen kann.

    aber ganz zufrieden bin ich damit nicht (ich habe den Eindruck, damit die Performance ziemlich zu drücken)

    Du setzt rekursiv Statements an das DBMS ab, hast aber Performance-Bedenken?

    echo "$verabschiedung $name";

    1. Hallo auch und danke für Deine Antwort,

      Vielleicht hast du unterschiedliche PHP-Versionen auf den beiden Rechnern. Möglicherweise wurde die Default-Einstellung unten genannten Attributes zwischen zwei Versionen umgestellt.

      das wäre vielleicht eine Möglichkeit - hab ich noch nicht gecheckt (werd ich gleich mal machen).

      (Deine Anführungszeichen sind nicht original.)

      Nee, das hatte ich irgendwoher kopiert - hatte grad keinen Zugriff auf das Script.  So siehts bei mir aus:
      if($aOptions === NULL) {
      $aOptions = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true);
      }
      parent::__construct($sDSN, $sUser, $sPass, $aOptions);

      Du setzt rekursiv Statements an das DBMS ab, hast aber Performance-Bedenken?

      Huch! Woher weißt Du von meiner Rekursion? Uri??? xD

      Gruß,
      Manu

      1. echo $begrüßung;

        Du setzt rekursiv Statements an das DBMS ab, hast aber Performance-Bedenken?
        Huch! Woher weißt Du von meiner Rekursion? Uri??? xD

        Du erwähntest es in deinem Ausgangsposting.

        echo "$verabschiedung $name";

        1. Spricht den irgendetwas gegen buffered queries?

          Gruß,
          Manu

          1. echo $begrüßung;

            Spricht den irgendetwas gegen buffered queries?

            Bei "normalem" Gebrauch im Webumfeld eher nicht. Bei deutlich größeren Datenmengen, als sie üblicherweise auf Webseiten zu finden sind, verbraucht der Puffer eine Menge Speicher und das Script läuft auch erst dann weiter, wenn die Pufferung abgeschlossen ist. Dann sollte man sich überlegen und diese Überlegung durch Messungen positiv oder negativ bestätigen, ob das Umgehen der Pufferung angebracht ist.

            echo "$verabschiedung $name";

            1. Danke für die Info, zum Glück waren die bisherigen Performanceprobs doch eher auf mein lahmendes Schleppi zurückzuführen... :)

              Gruß,
              Manu