2017-08-06 88 views
0

我在C++中实现mySQL并遇到问题。我得到一个seg故障。我不知道为什么。C++ Seg中的MySQL错误

希望有人知道发生了什么事。
该seg故障似乎发生在MYSQL_ROW productList;行之后的某处,但我无法确定哪些位置在哪里。

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

您从不真正检查查询(或init)是否成功,以及在调用mysql_store_result之后resSetProduct是否为非null。另外,在'\'之后/之前还有一些额外的空格,是故意的吗? – PhilMasterG

+0

向前走,并删除多余的空间。不会这样做(检查查询或resSetProduct)导致seg故障?我正在使用我为同一个班级编写的其他方法,并且他们工作得很好。我不是100%熟悉这一点。 – kevin

+1

你应该检查'mysql_real_query'是否返回零。如果没有,'mysql_store_result'将返回NULL,'mysql_num_rows'可能会因段错误而失败。 – PhilMasterG

回答

0

您应该检查mysql_query是否返回零。如果没有,mysql_store_result将返回NULL,mysql_num_rows可能会因段错误而失败。

如果mysql_query返回非零值,您可以根据mysql文档检查错误代码,例如。这里:MySQL mysql_query

只要这些错误被清除,mysql_num_rows不应该seg段了。

+0

非常感谢! – kevin