tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
526
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TMM TMM ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    40
    Hallo,
    ich habe ein eher triviales Problem mit einer mysqli - Abfrage und zwar möchte ich ein Ergebnisarray einer ersten Abfrage für eine zweite Abfrage weiterverwenden, das Problem ist, dass wenn ich die erste Abfrage mit

    PHP-Code:
    $stmt->close(); 
    schließe, das Ergebnis ja verworfen wird und ich es so nicht mehr weiterverwendet kann. Lasse ich dagegen das Statement offen und verschachtele die 2. Abfrage, bekomme ich folgende Fehlermeldung
    PHP-Code:
    Warningmysqli::prepare() [mysqli.prepare]: All data must be fetched before a new statement prepare takes place in /.../vt_umsatz_abfragen/abfrage_tagesumsaetze_vt.php on line 29 
    Hier der Code
    PHP-Code:
    // Selektion der Tagesumsaetze aller User
      
    $stmt $db->prepare(
                        
    ' SELECT 
                                    user_name, SUM(vt_umsatz)
                          FROM
                                    USER_VT
                                    
                          GROUP BY  user_name '
    );   
      
      
    $stmt->execute();
      
    $stmt->bind_result($user_name$vt_umsatz);
      
      while(
    $stmt->fetch()) {      
                
    $ergebnis[$i][0]=$user_name;
                
    $ergebnis[$i][1]=$vt_umsatz;    
                
    $i++; 
                
                
    $stmt2 $db->prepare(
                                    
    ' UPDATE
                                            USER_UMSAETZE
                                      SET
                                            vt_umsatz = ?
                                      WHERE
                                            user_name = ? '
    );
                
                
    $stmt2->bind_param('ds'$vt_umsatz$user_name);
                
    $stmt2->execute();
                
    $stmt2->close();
                    
      };
      
    // Speicher freigeben
      
    $stmt->close(); 
    Jetzt meine Frage, wie kann ich das Array so speichern, dass es auch nach einem
    PHP-Code:
    ->close(); 
    noch zur Verfügung steht, oder wie kann ich die zweite Abfrage ausführen, ohne eine Kollision mit der noch offenen Abfrage zu verursachen? Ich hoffe jemand hat da einen Tipp, im Web werden die Ergebnisse in den Beispielen immer nur ausgegeben, anscheinend hat noch nie jemand versucht, ein Ergebnis für eine 2. Abfrage weiterzuverwenden...
     
    Es war einmal vor langer Zeit, da lebte die Variable ist_nichts_wert.
    Da kam ein schlauer Programmierer und setzte noch ein $ davor.

  2. #2
    TMM TMM ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    40
    Hab das Problem inzwischen selbst gelöst, mit einem Mix aus mysql und mysqli - nicht schön, aber es funktioniert...

    Falls es jemanden interessiert, hier der Code:

    PHP-Code:
    <?php
    // MySQLi Datenbankverbindung herstellen
    include_once('../login_config.php');

    // MySQL-Datenbankverbindung herstellen
    $mysql mysql_connect('localhost''***''***')
            OR DIE (
    'Keine Verbindung hergestellt!');
             
    mysql_select_db('db***')
                OR DIE (
    'Datenbank nicht gefunden!');

             
             
    $abfrage    'SELECT user_name FROM USER_VT GROUP BY user_name';
    $ergebnis   mysql_query($abfrage);

    while(
    $row mysql_fetch_object($ergebnis)){
        
    $user $row->user_name;
        
        
    $stmt $db->prepare(
                           
    '    UPDATE
                                        USER_UMSAETZE
                                SET
                                        vt_umsatz = vt_umsatz + (SELECT SUM(vt_umsatz) FROM USER_VT WHERE user_name = ?)
                                WHERE
                                        USER_UMSAETZE.user_name = ?'
    );
                
        
    $stmt->bind_param('ss'$user$user);
        
    $stmt->execute();
        
    $stmt->close();
    };

      
    ?>
    Falls jemand einen eleganteren Lösungsvorschlag hat, probiere ich diesen gerne auch aus
     
    Es war einmal vor langer Zeit, da lebte die Variable ist_nichts_wert.
    Da kam ein schlauer Programmierer und setzte noch ein $ davor.

  3. #3
    kab-media kab-media ist offline Mitglied
    Registriert seit
    Oct 2011
    Beiträge
    23
    Du kannst das ganze doch auch mit mysqli prozedural und nicht oo erstellen. Dann brauchst den mysql Mix doch eigentlich nicht?
     
    Viele Grüße

    kab-media

  4. #4
    TMM TMM ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    40
    Stimmt, mysqli geht ja auch prozedural, danke für den Hinweis, werde ich wenn Zeit ist auf mysqli ändern
     
    Es war einmal vor langer Zeit, da lebte die Variable ist_nichts_wert.
    Da kam ein schlauer Programmierer und setzte noch ein $ davor.

Ähnliche Themen

  1. MySqli Abfrage ob Tabelle existiert
    Von Spelmann im Forum PHP
    Antworten: 4
    Letzter Beitrag: 04.08.10, 19:46
  2. Abfrage mehrfach verwenden
    Von luchs3 im Forum PHP
    Antworten: 10
    Letzter Beitrag: 06.07.09, 22:25
  3. [Access] Parameter Abfrage per VBA verwenden
    Von Thomas Darimont im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 26.08.08, 11:24
  4. [VB.NET] Abfrageergebnis für neue Abfrage verwenden
    Von deusfalsus im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 15.07.08, 16:45
  5. sql server 2000 Abfrage einer Abfrage
    Von supafunk im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 15.04.05, 18:20

Stichworte