2017-08-23 1 views
0

In Kürze habe ich ein Problem mit While-Schleife ... Ich weiß nicht, was los ist, also dachte ich, dass ich um Hilfe bitten sollte, nach einer Menge von Suchen, weiß ich, dass mysql_fetch_array eine Zeile in jeder Zeit zurückgibt, so sollten wir während verwenden, wenn wir alle Zeilen aus der Abfrage abrufen müssen. und nach dem Versuch während zu vermeiden und verwenden foreach fand ich, dass einfach können wir verwenden nicht foreach statt während oder wir können es als eine weitere Schleife nach während verwenden. sowieso, mein Problem ist: Ich erstellte eine gespeicherte Prozedur in Datenbank, und es funktioniert gut werfen meine Code mit , aber wenn ich versuchte, es in eine Schleife basierend auf IDs von einigen Daten setzen, While-Schleife gab ich die erste Reihe nur nach Berechnungen. also bitte, wenn jemand sehen kann, was ich nicht im Code sehen kann, zögern Sie nicht. Dank ..mysql_fetch_array zeigt die erste Zeile nur bei Verwendung der While-Schleife

$startdate = $_POST['startdate']; 
$enddate = $_POST['enddate']; 
$thefinalres="";  
$loop = mysql_query("SELECT * FROM mrh_chains order by id"); 
     if ($loop){ 
      while ($row = mysql_fetch_array($loop)) 
      { 
       $theid = $row['id']; 
       $thename = $row['name']; 
       //CALL PROCEDURE 
       $result = mysql_query("CALL calccommission($theid,'$startdate','$enddate')"); 
       if ($result){ 
        $row2 = mysql_fetch_array($result); 
        if ($row2[0]!=""){ 
         $thecommission = $row2[0]; 
        } else { 
         $thecommission = "Try to change dates, There are no data on these dates"; 
        } 
        $thefinalres .= $thename . " commission: ". $thecommission . "<br/>"; 
       } 
      } 

      $value = array('msg' => 'true'); 
      $value["res"] = $thefinalres; 

     } else { 
      $value = array('msg' => 'false'); 
     } 
+0

So sind Sie sicher, SELECT * FROM mrh_chains bestellen nach ID gibt mehrere Zeilen zurück? Und bist du sicher, dass das Problem Iteration und nicht bedingte Logik ist? Fügen Sie einige Debug-Zeilen hinzu? – ficuscr

+0

yeah sure, auch wenn ich die ** while-schleife ** einmal in einer [tag: php] datei probierte, es hat gut funktioniert, und alle Zeilen bekommen, aber hier nach der Prozedur gibt es mir nur die erste Zeile – Hossam

+0

Sie haben die Protokolldateien auf Fehler überprüft? – JazZ

Antwort

0

nach einer looooooooooooooooot der Suche, fand ich Lösung mit

$mysqli = new mysqli( "HOST", "USR", "PWD", "DBNAME"); 
$ivalue=1; 
$res = $mysqli->multi_query("CALL myproc($ivalue,@x);SELECT @x"); 
if($res) { 
    $results = 0; 
    do { 
    if ($result = $mysqli->store_result()) { 
     printf("<b>Result #%u</b>:<br/>", ++$results); 
     while($row = $result->fetch_row()) { 
     foreach($row as $cell) echo $cell, "&nbsp;"; 
     } 
     $result->close(); 
     if($mysqli->more_results()) echo "<br/>"; 
    } 
    } while($mysqli->next_result()); 
} 
$mysqli->close(); 

ich Antwort in diesem Artikel gefunden: https://forums.mysql.com/read.php?52,198596,198717

Verwandte Themen