2016-07-31 9 views
0

Ich erstelle eine Seite für meinen Shop, aber ich habe get_result verwendet, und nachdem ich alles abgeschlossen habe, realisierte ich, dass HostGator mir nicht erlauben konnte, mysqlnd laufen zu lassen. Also musste ich alles in bind_result umwandeln, aber ich bin hier in einer Sackgasse wahrscheinlich frustriert, dass ich alles verändern muss ...zurückgeben mehr als 1 mysql einträge mit bind_result

Wie auch immer mein Problem ist, dass ich einige Abfragen anrufe, um Tabellen zu lesen, aber das Ganze Code stoppt nach 1 Ergebnis. In diesem Code zum Beispiel rufe ich eine Liste von Terminen auf, obwohl ich wie 5 Termine in der Datenbank gesetzt habe, gibt es nur den ersten zurück. Es funktioniert wie es soll und liest aus mehreren Tabellen, stoppt aber bei 1 Schleife. Es würde mir nicht erlauben, die zweite Tabelle weiter zu lesen, wenn ich kein $ listappointments_stmt-> free_result() gemacht hätte; zuerst vor den nächsten Abfragen, also denke ich, das ist mein Problem, aber ich habe keine Ahnung, wie man um es herum arbeitet, da es mir einen booleschen Fehler gibt, wenn ich es dort nicht habe. Irgendwelche Ideen willkommen!

Vielen Dank im Voraus, Xenos K.

<?php 
       $query="SELECT * FROM appointments"; 
       $listappointments_stmt=$mysqli->prepare($query); 
       $listappointments_stmt->execute(); 
       $listappointments_stmt->bind_result($AppId, $AppDate, $AppTime, $AppType, $AppArtist, $AppTitle, $AppClient, $AppPrice, $AppNotes); 
       while ($listappointments_stmt->fetch()) 
       { 
       $theDate=date("d-M-Y", strtotime($AppDate)); 
       echo "<tr><td>".$theDate."</td>"; 
       echo "<td>".$AppTime."</td>"; 
       $listappointments_stmt->free_result(); 
       $tempappointmentType=$AppType; 
       $query2="SELECT * FROM appointmenttypes WHERE ID=?"; 
       $listappointmentsTypes_stmt=$mysqli->prepare($query2); 
       $listappointmentsTypes_stmt->bind_param("s", $tempappointmentType); 
       $listappointmentsTypes_stmt->execute(); 
       $listappointmentsTypes_stmt->bind_result($AppTypeId, $AppTypeName, $AppTypeColor); 
       while ($listappointmentsTypes_stmt->fetch()) 
       { 
       echo "<td><span class=\"label\" style=\"background-color:".$AppTypeColor."\">".$AppTypeName."</span></td>"; 
       } 
       $listappointmentsTypes_stmt->free_result(); 
       $listappointmentsTypes_stmt->close(); 
       $tempappointmentArtist=$AppArtist; 
       $query3="SELECT * FROM staff WHERE ID=?"; 
       $listappointmentsArtist_stmt=$mysqli->prepare($query3); 
       $listappointmentsArtist_stmt->bind_param("s", $tempappointmentArtist); 
       $listappointmentsArtist_stmt->execute(); 
       $listappointmentsArtist_stmt->bind_result($ArtId, $ArtName, $ArtNickName, $ArtSurname, $ArtPhone, $ArtBirthDate, $ArtIdentificationNumber, $ArtStreetName, $ArtStreetNumber, $ArtPostalCode, $ArtCity, $ArtCountry, $ArtPosition, $ArtEmail, $ArtFacebook, $ArtInstagram); 
       while ($listappointmentsArtist_stmt->fetch()) 
       { 
       echo "<td>".$ArtName." ".$ArtNickName." ".$ArtSurname."</td>"; 
       } 
       $listappointmentsArtist_stmt->free_result(); 
       $listappointmentsArtist_stmt->close(); 
       echo "<td>".$AppTitle."</td>"; 
       $tempappointmentClient=$AppClient; 
       $query4="SELECT * FROM clients WHERE ID=?"; 
       $listappointmentsClient_stmt=$mysqli->prepare($query4); 
       $listappointmentsClient_stmt->bind_param("s", $tempappointmentClient); 
       $listappointmentsClient_stmt->execute(); 
       $listappointmentsClient_stmt->bind_result($CliId, $CliName, $CliSurname, $CliPhone, $CliBirthDate, $CliIdentificationNumber, $CliStreetName, $CliStreetNumber, $CliPostalCode, $CliCity, $CliCountry, $CliFathersFullName, $CliMothersFullName, $CliEmail, $CliFacebook, $CliInstagram, $CliNotes); 
       while ($listappointmentsClient_stmt->fetch()) 
       { 
       echo "<td>".$CliName." ".$CliSurname."</td>"; 
       echo "<td>".$CliPhone."</td>"; 
       } 
       $listappointmentsClient_stmt->free_result(); 
       $listappointmentsClient_stmt->close(); 
       echo "<td>".$AppPrice."</td>"; 
       echo "<td><a href=\"appointmentsedit.php?appointmentStatus=view&appointmentId=".$AppId."\" title=\"".$lang['view']."\"><i class=\"text-green fa fa-eye\"></i></a></td>"; 
       echo "<td><a href=\"appointmentsedit.php?appointmentStatus=edit&appointmentId=".$AppId."\" title=\"".$lang['edit']."\"><i class=\"text-blue fa fa-edit\"></i></a></td>"; 
       echo "<td><a href=\"appointmentsedit.php?appointmentStatus=delete&appointmentId=".$AppId."\" title=\"".$lang['delete']."\"><i class=\"text-red fa fa-trash-o\"></i></a></td></tr>"; 
       } 
       $listappointments_stmt->close(); 
       ?> 

Antwort

1

Sie werden klug sein, zu lernen, JOIN Anweisungen in SQL zu verwenden. Dadurch können Sie nur eine SQL-Abfrage verwenden, um alle benötigten Ergebnisse abzurufen.

In der Zwischenzeit, wenn Sie einige SQL-Abfragen in andere verschachteln, benötigt die äußere Abfrage (in Ihrem Fall SELECT * FROM appointments) eine separate Datenbankverbindung (in Ihrem Fall $mysqli) aus den anderen Abfragen. Durch das Ausgeben einer neuen Abfrage von der Verbindung werden die restlichen Abfragen zurückgesetzt.

Pro-Tipp: Vermeiden Sie die Verwendung von SELECT * in Produktionssoftware. Stattdessen geben Sie eine Liste der Spalten, die Sie benötigen. Ihre Software wird robuster und einfacher zu verstehen sein, wenn Sie das tun.

+0

Vielen Dank für die Information Ollie. Eine extra Verbindung herzustellen und das free_result zu verschieben, hat den Trick gemacht. Ich werde den Select * am Endprodukt natürlich ändern und werde in JOIN kommen, wie du erwähnt hast. Danke nochmal! –