2017-04-20 4 views
0

Ich hatte eine Frage, wenn es um die Arbeit mit MySql in C++ geht.MySql eingebettet in C++

Es ist wahrscheinlich etwas klein, dass ich übersehe, aber innerhalb meiner ersten while Schleife, rowFlight[0] hält, was ist die Flugnummer (Nummer zwischen 1-5).

Ich versuche, dass innerhalb meiner zweiten Abfrage zu verwenden mysql_query(connection ,"SELECT firstName, lastName FROM passenger, manifest, flight WHERE passenger.passnum = manifest.passnum AND manifest.flightnum = flight.flightnum AND flight.flightnum = '*rowFlight[0]';");

Aber nichts wird zurückgegeben. Wenn ich mysql_num_rows nach der Abfrage verwenden, um anzuzeigen, wie viele Zeilen zurückgegeben wurden, wird 0 angezeigt, aber wenn ich einen Wert in der Abfrage (zwischen 1 und 5) hart Code statt *rowFlight[0] codiere, bekomme ich Zeilen, die zurückgegeben werden (die Zeilen Ich erwarte zu sehen).

Was ist der richtige Weg, um das Ergebnis einer Abfrage in einem anderen zu verwenden?

#include <iostream> 
#include <iomanip> 
#include <mysql.h> 
using std::cout; using std::cerr; 
using std::setw; using std::endl; 

int main() { 
MYSQL *connection, mysql; 
connection = mysql_init(&mysql); //initialize instance 

connection = mysql_real_connect(connection, SERVER, USER, PASSWORD, DATABASE, 0, NULL, 0); 

if(connection) { //if connected successfully 
    MYSQL_RES *returnValFlight; //pointer to receive the return value 
    MYSQL_ROW rowFlight; //variable for rows 

    mysql_query(connection ,"SELECT * FROM flight;"); //Pull all the flights (flightnum, origination, destination, miles) 
    returnValFlight = mysql_store_result(connection); //returnVal is a temporary file for the results of the query, a cursor 

    MYSQL_RES *returnValPassenger; //pointer to receive the return value 
    MYSQL_ROW rowPassenger; //variable for rows 

    cout << endl 
     << "Flight Number:  Flight Origination:  Flight Destination:  Miles:" << endl 
     << "--------------------------------------------------------------------------" << endl; 

    while ((rowFlight = mysql_fetch_row(returnValFlight)) != NULL) { //while not end of the cursor  
     cout << rowFlight[0] << rowFlight[1] << rowFlight[2] << rowFlight[3] << endl; //print flight info 

     mysql_query(connection ,"SELECT firstName, lastName FROM passenger, manifest, flight WHERE passenger.passnum = manifest.passnum AND manifest.flightnum = flight.flightnum AND flight.flightnum = '*rowFlight[0]';"); //query 
     returnValPassenger = mysql_store_result(connection); //returnVal is a temporary file for the results of the query, a cursor 


     while ((rowPassenger = mysql_fetch_row(returnValPassenger)) != NULL) //while not end of the cursor  
      cout << rowPassenger[0] << " " << rowPassenger[1] << endl; //print passengers on that flight 
    } 

    cout << endl; 

    mysql_free_result(returnValPassenger); 
    mysql_free_result(returnValFlight); 
    mysql_close(connection); //close connection 
} 
else //connection failed 
    cerr << "Connection Failed!" << endl; 

return 0; 
} 

Antwort

0

Behebt das Problem, rowFlight[0] in der Abfrage verwenden zu können.

while ((rowFlight = mysql_fetch_row(returnValFlight)) != NULL) { //while not end of the cursor  
     cout << setw(7) << rowFlight[0] << setw(24) << rowFlight[1] << setw(22) << rowFlight[2] << setw(18) << rowFlight[3] << endl << endl; //print flight info (flightnum, origination, destination, miles)) 

     ostringstream os; 

     os << "SELECT firstName, lastName FROM passenger, manifest WHERE passenger.passnum = manifest.passnum AND manifest.flightnum =" << rowFlight[0]; //pull all passengers on that flight 

     mysql_query(connection, os.str().c_str()); 
     returnValPassenger = mysql_store_result(connection); //returnVal is a temporary file for the results of the query, a cursor 

     cout << setw(50) << "List Of Passengers On Flight Number " << rowFlight[0] << endl //current flight number 
      << setw(50) << "Total Passengers -> " << mysql_num_rows(returnValPassenger) << endl << endl; //how mnay passengers on that flight? 

     while ((rowPassenger = mysql_fetch_row(returnValPassenger)) != NULL) //while not end of the cursor  
      cout << setw(35) << rowPassenger[0] << " " << rowPassenger[1] << endl; //print passengers on that flight 

    }