2017-08-06 3 views
0

Ich implementiere MySQL in C++ und stieß auf ein Problem. Ich bekomme einen Segeldiebstahl. Und ich bin mir nicht sicher warum.MySQL in C++ Seg Fehler

Hatte gehofft, jemand würde wissen, was vor sich geht.
Der Seg Fehler scheint irgendwo nach der MYSQL_ROW productList; Linie passiert, ich habe nicht in der Lage, Punkt, wo aber.

void Receiving::getProduct(const string productToReturn) { 
MYSQL *connect, mysql;     //Pointers to MySQL 
connect = mysql_init(&mysql);   // Initialize the connections 
int totalRows = 0; 

connect = mysql_real_connect(connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0); //Connect to database 

if(connect) {       //If connection successful 
    string sqlQuery;     //will hold query 

    MYSQL_RES *resSetProduct;   //define product result set 
    MYSQL_ROW productList;    //define row for product 

    sqlQuery = "SELECT * FROM Inventory WHERE item_id = \' "; //Create query with desired product id 
    sqlQuery += productToReturn; 
    sqlQuery += " \'"; 

    mysql_query(connect, sqlQuery.c_str());         // Send query to the database 
    resSetProduct = mysql_store_result(connect);        // Receive the result and store it in resSetProduct 
    totalRows = mysql_num_rows(resSetProduct);         // count of stored rows 

    if(totalRows == 0){              //nothing found 
     cout << "Sorry! No inventory found for that product!" << endl; 
    } 
    else { 
     cout << "Product Id  In Stock" << endl; 

     while((productList = mysql_fetch_row(resSetProduct)) != NULL) {  //printout the products 
      cout << productList[0] << " " << productList[1] << endl; 
     } 
    } 
    mysql_free_result(resSetProduct); 
} 
else                   //Failed to connect 
    cerr << "Failed To Connect!"; 

mysql_close(connect); 
} 
+0

Sie überprüfen nie wirklich, ob die Abfrage (oder Init) erfolgreich war und ob resSetProduct nach dem Aufruf von mysql_store_result nicht null ist. Außerdem haben Sie einige zusätzliche Leerzeichen nach/vor dem '\ '', ist das absichtlich? – PhilMasterG

+0

Ging voran und entfernte die zusätzlichen Räume. Würde das nicht tun (Überprüfung der Abfrage oder resSetProduct), die den Seg-Fehler verursachen? Ich gehe von anderen Methoden, die ich für diese Klasse geschrieben habe, und sie funktionieren gut. Ich bin nicht 100% damit vertraut. – kevin

+1

Sie sollten überprüfen, ob mysql_real_query null zurückgibt. Wenn dies nicht der Fall ist, gibt "mysql_store_result" NULL zurück und "mysql_num_rows" kann mit einem segfault fehlschlagen. – PhilMasterG

Antwort

0

Sie sollten überprüfen, ob mysql_query Null zurückgibt. Wenn dies nicht der Fall ist, wird mysql_store_result NULL zurückgeben und mysql_num_rows kann mit einem segfault fehlschlagen.

Wenn mysql_query ungleich Null zurückgibt, können Sie die Fehlercodes gemäß der mysql-Dokumentation überprüfen, z. hier: MySQL mysql_query

Sobald diese Fehler behoben sind, sollte mysql_num_rows nicht mehr segfault werden.

+0

Vielen Dank! – kevin