chrisi1002: nur ein preparedStatement möglich?

Hallo!

Ich habe ein prepared-Statement das ich ausführe und gehe in einer Schleife die Datensätze durch.
Ich möchte nun in der Schleife ein zweites Prepared-Statement erstellen, jedoch funktioniert das nicht. Müsste zuerst das erste Statement mit closeCursor() schließen um ein neues zu machen.

sind also zwei "offene" Statements nicht möglich?

  1. hi,

    sind also zwei "offene" Statements nicht möglich?

    Doch, schon. Nuhr: ausführen darfst Du nur eins.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. hi,

      sind also zwei "offene" Statements nicht möglich?

      Doch, schon. Nuhr: ausführen darfst Du nur eins.

      Hotte

      alles klar... gibt es eine andere möglichkeit zwei statements zur selben zeit auszuführen?

      1. Hi!

        sind also zwei "offene" Statements nicht möglich?
        Doch, schon. Nuhr: ausführen darfst Du nur eins.
        alles klar... gibt es eine andere möglichkeit zwei statements zur selben zeit auszuführen?

        Also, entweder ist Hotte Hellseher oder ... (Normalerweise ist Perl sein Hobby und von PHP hat er wenig Ahnung.)
        Du gibt weder an, mit welchem DBMS du arbeitest, noch ob der Fehler im DBMS oder bei der Abfrage durch PHP auftritt. PHP ist ist zwar die Kategorie, in der du das Problem einsortiert hast, aber dass du PDO verwendest, muss man anhald des eingestreuten Methodennamens closeCursor() raten. Und nun fragst du nach einer "anderen Möglichkeit" ohne gesagt zu haben, was denn konkret deine derzeitige ist.

        Auf der Handbuchseite zu PDOStatement->closeCursor steht übrigens, dass diese Methode bei einigen DBMS erforderlich ist, wenn man die Ergebnismenge nicht "leergefetcht" hat. Das heißt, dass sie bei anderen DBMS nicht erforderlich ist. Mit MySQL habe ich eben problemlos mit zwei Prepared Statements zur selben Zeit im exekutierten und noch nicht leergefetchtem Zustand arbeiten können.

        Üblicherweise ist die MySQL-Client-API auf Buffered Query eingestellt. Das heißt, dass bei einem Query- oder Execute-Aufruf das Abfrageergebnis komplett im Hintergrund in einen Zwischenspeicher der Client-API abgefragt wird, so dass im Server selbst keine unleergefetchten Ergebnismengen liegen. Dieses Verhalten muss man explizit dektivieren, wenn man das so nicht haben will, dafür aber dein geschildertes Problem. Siehe Attribut PDO::MYSQL_ATTR_USE_BUFFERED_QUERY.

        Lo!

      2. Hello,

        alles klar... gibt es eine andere möglichkeit zwei statements zur selben zeit auszuführen?

        Innerhalb eines PHP-Scriptes sowieso nicht zur selben Zeit, sondern nacheinander. Wie das mit dem Buffer aussieht, hat Dir dedlfix schon geschrieben.
        Wenn Du zwei unabhängige Statements ausführen willst, dann hole Dir zwei Connection-Identifier auf die Datenbank. Das steht Dir frei. Das ist allerdings keine saubere Programmierung.

        Wenn es sich um zwei verschiedene Datenbanken handelt, sieht das schon andrs aus, wenn es zwei unterscheidliche Datenbankserver sind, geht es (meistens) gar nicht anders.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Moin!

    Ich habe ein prepared-Statement das ich ausführe und gehe in einer Schleife die Datensätze durch.
    Ich möchte nun in der Schleife ein zweites Prepared-Statement erstellen, jedoch funktioniert das nicht. Müsste zuerst das erste Statement mit closeCursor() schließen um ein neues zu machen.

    Du gibst zu wenig Infos, um dir sinnvoll helfen zu können.

    Mögliche Antwortansätze wären:

    • Du machst was falsch im Code.
    • Du machst was falsch im SQL.
    • Du willst in Wahrheit JOINs oder Subselects benutzen.

    Lies Tipps für Fragende, und liefere mehr Information.

    - Sven Rautenberg