14. februar 2013 - 21:55
Der er
13 kommentarer og 1 løsning
mysqli flere whiles
Jeg har før haft flere whiles inden i hinanden, men er nu ved at kode om til mysqli og så giver det mig nogle problemer. Kan det passe man ikke kan have flere while ($querye->fetch()) {} inde i hinanden i mysqli?
Annonceindlæg fra FPT Software
14. februar 2013 - 22:05
#1
Det kan du godt. Men bruge flere connections (mysqli objekter).
14. februar 2013 - 22:06
#2
Eksempel fra lageret: $con1 = new mysqli('localhost', 'root', '', 'Test'); $stmt1 = $con1->prepare('SELECT mainid,txtval FROM main WHERE ? <= mainid AND mainid <= ?'); $stmt1->bind_param('ii', $start, $end); $start = 1; $end = 2; $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($mainid, $txtval); echo "<ul>\r\n"; while ($stmt1->fetch()) { echo "<li>$txtval</li>\r\n"; $con2 = new mysqli('localhost', 'root', '', 'Test'); $stmt2 = $con2->prepare('SELECT subid,txtval FROM sub WHERE mainid = ?'); $stmt2->bind_param('i', $mainid); $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($subid, $txtval); echo "<ul>\r\n"; while ($stmt2->fetch()) { echo "<li>$txtval</li>\r\n"; } echo "</ul>\r\n"; $stmt2->close(); $con2->close(); } echo "</ul>\r\n"; $stmt1->close(); $con1->close();
14. februar 2013 - 22:06
#3
Ofte kan man dog undgaa det via JOIN eller andet.
14. februar 2013 - 22:10
#4
<ole> Er det nødvendigt at oprette to forbindelser? Jeg mener at mindes, jeg har lavet noget lignende med én forbindelse - med to statements /mvh </bole>
14. februar 2013 - 22:14
#5
Jeg ville nok skrive:
$con1 = new mysqli('localhost', 'root', '', 'Test'); $stmt1 = $con1->prepare('SELECT mainid,txtval FROM main WHERE ? <= mainid AND mainid <= ?'); $stmt2 = $con2->prepare('SELECT subid,txtval FROM sub WHERE mainid = ?'); $stmt1->bind_param('ii', $start, $end); $start = 1; $end = 2; $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($mainid, $txtval); echo "<ul>\r\n"; while ($stmt1->fetch()) { echo "<li>$txtval</li>\r\n" $stmt2->bind_param('i', $mainid); $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($subid, $txtval); echo "<ul>\r\n"; while ($stmt2->fetch()) { echo "<li>$txtval</li>\r\n"; } echo "</ul>\r\n"; } echo "</ul>\r\n"; $stmt1->close(); $stmt2->close(); $con2->close(); $con1->close();
14. februar 2013 - 22:16
#6
Arhhhg ... jeg ville nu nok ikke skrive $con2->close(); =)
14. februar 2013 - 22:24
#7
Det er mere effektivt at genbruge connection.
14. februar 2013 - 22:26
#8
Med mysql kunne man fyre en ny query af, hvis bare man havde hentet alle raekker fra den gamle query til memory. Muligvis kan man ogsaa det i mysqli.
14. februar 2013 - 22:34
#9
jeg får følgende fejl Fatal error: Call to a member function prepare() on a non-object in line 387 og det er $stmt1 = $con1->prepare('select DISTINCT ...... jeg ved $vare_gr_array udskrives rigtigt foreach($vare_gr_array as $id => $vare_gr) { echo "<tr>"; echo "<td class=\"top\"><b>$vare_gr</b></td>"; echo "<td class=\"top\"><b>Antal</b></td>"; echo "<td class=\"top\"><b>I alt</b></td>"; echo "<td class=\"top\"><b>Gns. pr. stk</b></td>"; echo "</tr>"; $bg = 1; $grupp_total_antal = 0; $gruppe_sum = 0; $stmt1 = $con1->prepare('select DISTINCT vare.vare, vare.vare_id FROM vare left outer join bruger_indkob_dato on vare.vare_id = bruger_indkob_dato.vare_id WHERE vare.vare_gr=? AND bruger_indkob_dato.bruger_id= ? AND bruger_indkob_dato.dato=?'); $stmt2 = $con2->prepare('SELECT SUM(antal), SUM(belob_ialt) FROM bruger_indkob_dato WHERE vare_id=? AND bruger_indkob_dato.bruger_id=? AND bruger_indkob_dato.dato=?'); $stmt1->bind_param('sss', $vare_gr_id1, $log_bruger_id1, $db_format_dato1); $vare_gr_id1 = $id; $log_bruger_id1 = $log_bruger_id; $db_format_dato1 = $db_format_dato; $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($vare, $vare_id); while ($stmt1->fetch()) { if($bg == 1) { $Bgcolor = "farve" . $bg; } else { $Bgcolor = "farve" . $bg; $bg = 0; } $bg++; $stmt2->bind_param('sss', $vare_gr_id2, $log_bruger_id2, $db_format_dato2); $vare_gr_id2 = $id; $log_bruger_id2 = $log_bruger_id; $db_format_dato2 = $db_format_dato; $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($sum, $belob); echo "<ul>\r\n"; while ($stmt2->fetch()) { $grupp_total_antal = $grupp_total_antal + $total_antal; $gns_pr_stk = $total_pris / $total_antal; $gns_pr_stk1 = dk_kr($gns_pr_stk); $gruppe_sum = $total_pris + $gruppe_sum; echo "<tr>"; echo "<td class=\"$Bgcolor\">$vare</td>"; echo "<td class=\"$Bgcolor\">$total_antal</td>"; echo "<td class=\"$Bgcolor\">$total_pris1</td>"; echo "<td class=\"$Bgcolor\">$gns_pr_stk1</td>"; echo "</tr>"; } } $stmt1->close(); $stmt2->close(); $con1->close(); }
14. februar 2013 - 23:08
#10
Har du new'et $con1 ?
15. februar 2013 - 10:13
#11
Det var der fejlen var. Tak for hjælpen begge to. olebole plejer ikke at ville have point, men hvis du, arne_v, vil kommer du bare med et svar
15. februar 2013 - 12:09
#12
svar
15. februar 2013 - 16:11
#13
- og selvtak herfra *o)
15. februar 2013 - 17:40
#14
Har lige opdaget en mærkelig fejl i scriptet herunder udskrives alle danske bogstaver som en sort firkant med et ? i midten. Det er kun ting som hentes fra databasen. Jeg har en anden sortering på den samme side som hiver de samme data ud og her udskrives danske bogstaver fint. har prøvet at indsætte $mysqli->set_charset("utf8"); efter de connects jeg har, men det hjalp ikke. foreach($vare_gr_array as $id => $vare_gr) { echo "<tr>"; echo "<td class=\"top\"><b>$vare_gr</b></td>"; echo "<td class=\"top\"><b>Antal</b></td>"; echo "<td class=\"top\"><b>I alt</b></td>"; echo "<td class=\"top\"><b>Gns. pr. stk</b></td>"; echo "</tr>"; $bg = 1; $grupp_total_antal = 0; $gruppe_sum = 0; $con1 = new mysqli($dbhost, $dbuname, $dbpass, $dbname); $stmt1 = $con1->prepare('select DISTINCT vare.vare, vare.vare_id FROM vare left outer join bruger_indkob_dato on vare.vare_id = bruger_indkob_dato.vare_id WHERE vare.vare_gr=? AND bruger_indkob_dato.bruger_id= ? AND bruger_indkob_dato.dato=?'); $stmt1->bind_param('sss', $vare_gr_id1, $log_bruger_id1, $db_format_dato1); $vare_gr_id1 = $id; $log_bruger_id1 = $log_bruger_id; $db_format_dato1 = $db_format_dato; $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($vare, $vare_id); while ($stmt1->fetch()) { if($bg == 1) { $Bgcolor = "farve" . $bg; } else { $Bgcolor = "farve" . $bg; $bg = 0; } $bg++; $con2 = new mysqli($dbhost, $dbuname, $dbpass, $dbname); $stmt2 = $con2->prepare('SELECT SUM(antal) as total_antal, SUM(belob_ialt) as total_pris FROM bruger_indkob_dato WHERE vare_id=? AND bruger_indkob_dato.bruger_id=? AND bruger_indkob_dato.dato=?'); $stmt2->bind_param('sss', $vare_gr_id2, $log_bruger_id2, $db_format_dato2); $vare_gr_id2 = $vare_id; $log_bruger_id2 = $log_bruger_id; $db_format_dato2 = $db_format_dato; $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($total_antal, $total_pris); while ($stmt2->fetch()) { $grupp_total_antal = $grupp_total_antal + $total_antal; $gns_pr_stk = $total_pris / $total_antal; $gns_pr_stk1 = dk_kr($gns_pr_stk); $total_pris1 = dk_kr($total_pris); $gruppe_sum = $total_pris + $gruppe_sum; echo "<tr>"; echo "<td class=\"$Bgcolor\">$vare</td>"; echo "<td class=\"$Bgcolor\">$total_antal</td>"; echo "<td class=\"$Bgcolor\">$total_pris1</td>"; echo "<td class=\"$Bgcolor\">$gns_pr_stk1</td>"; echo "</tr>"; } $gruppe_sum1 = dk_kr($gruppe_sum); $gruppe_gns_sum = $gruppe_sum / $grupp_total_antal; $gruppe_gns_sum1 = dk_kr($gruppe_gns_sum); } echo "<tr>"; echo "<td class=\"top\"><b>Sum</b></td>"; echo "<td class=\"top\"><b>$grupp_total_antal</b></td>"; echo "<td class=\"top\"><b>$gruppe_sum1</b></td>"; echo "<td class=\"top\"><b>$gruppe_gns_sum1</b></td>"; echo "</tr>"; $stmt1->close(); $stmt2->close(); $con1->close(); }
Vi tilbyder markedets bedste kurser inden for webudvikling