PHP und mysqli - Ergebnisarray einer Abfrage in zweiter Abfrage verwenden

TMM

Mitglied
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:
$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:
Warning: mysqli::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:
// 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:
->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... :eek:
 
Hab das Problem inzwischen selbst gelöst, mit einem Mix aus mysql und mysqli - nicht schön, aber es funktioniert... :D

Falls es jemanden interessiert, hier der Code:

PHP:
<?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 ;)
 
Zurück