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);
}
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
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
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