Hilfe bei Lösung eines Problems mit select
-
hallo habe da mal ein kleines prob mit einen select !
ich lade daten aus einer csv datei und will sie jetzt mit einer datenbank abgleichen leider will es nicht so wie ich will mit einen string
wenn ich es statisch mache geht es
das os ist debian ich hoffe es kann mir geholfen werden
mfg Greeneye85#include <iostream> #include <sstream> #include <fstream> #include <vector> #include <mysql.h> #include <string> #include <algorithm> using namespace std; int main(){ using std::string; using std::basic_string; unsigned int i; MYSQL *connect; connect=mysql_init(NULL); if (!connect) { cout<<"MySQL Initialization failed"; return 1; } connect=mysql_real_connect(connect, "localhost", "root", "XXXXX" , "pool" ,0,NULL,0); if (connect) { cout<<"connection Succeeded\n"; } else { cout<<"connection failed\n"; } ifstream inFile ("test.csv"); string queryText ; string line; int linenum = 0; while (getline (inFile, line)) { linenum++; if(linenum<1) { cout<<"Beide Zahlen sind gleich"; } if(linenum>1) { // cout << "\nLine #" << linenum << ":" << endl; istringstream linestream(line); //char item[300]; string item; string item1; string item2; string item3; string item4; string item5; string item6; string item7; string item8; string item9; string item10; string item11; string item12; string item13; string item14; string item15; string item16; string item17; string item18; string item19; string item20; string item21; string item22; string item23; string item24; string item25; string item26; string item27; string item28; string item29; string item30; //int itemnum = 0; char Dezimal_fuer_A = 34; getline (linestream, item, '|'); getline (linestream, item1, '|'); getline (linestream, item2, '|'); getline (linestream, item3, '|'); getline (linestream, item4, '|'); getline (linestream, item5, '|'); getline (linestream, item6, '|'); getline (linestream, item7, '|'); getline (linestream, item8, '|'); getline (linestream, item9, '|'); getline (linestream, item10, '|'); getline (linestream, item11, '|'); getline (linestream, item12, '|'); getline (linestream, item13, '|'); getline (linestream, item14, '|'); getline (linestream, item15, '|'); getline (linestream, item16, '|'); getline (linestream, item17, '|'); getline (linestream, item18, '|'); getline (linestream, item19, '|'); getline (linestream, item20, '|'); getline (linestream, item21, '|'); getline (linestream, item22, '|'); getline (linestream, item23, '|'); getline (linestream, item24, '|'); getline (linestream, item25, '|'); getline (linestream, item26, '|'); getline (linestream, item27, '|'); getline (linestream, item28, '|'); getline (linestream, item29, '|'); getline (linestream, item30, '|'); using std::replace; replace(item.begin(), item.end(), '\"','\0' ); replace(item2.begin(), item2.end(), '\"','\0' ); replace(item3.begin(), item3.end(), '\"','\0' ); replace(item4.begin(), item4.end(), '\"','\0' ); replace(item5.begin(), item5.end(), '\"','\0' ); replace(item6.begin(), item6.end(), '\"','\0' ); replace(item7.begin(), item7.end(), '\"','\0' ); replace(item8.begin(), item8.end(), '\"','\0' ); replace(item9.begin(), item9.end(), '\"','\0' ); replace(item10.begin(), item10.end(), '\"','\0' ); replace(item11.begin(), item11.end(), '\"','\0' ); replace(item12.begin(), item12.end(), '\"','\0' ); replace(item13.begin(), item13.end(), '\"','\0' ); replace(item14.begin(), item14.end(), '\"','\0' ); replace(item15.begin(), item15.end(), '\"','\0' ); replace(item16.begin(), item16.end(), '\"','\0' ); replace(item17.begin(), item17.end(), '\"','\0' ); replace(item18.begin(), item18.end(), '\"','\0' ); replace(item19.begin(), item19.end(), '\"','\0' ); replace(item20.begin(), item20.end(), '\"','\0' ); replace(item21.begin(), item21.end(), '\"','\0' ); replace(item22.begin(), item22.end(), '\"','\0' ); replace(item23.begin(), item23.end(), '\"','\0' ); replace(item24.begin(), item24.end(), '\"','\0' ); replace(item25.begin(), item25.end(), '\"','\0' ); replace(item26.begin(), item26.end(), '\"','\0' ); replace(item27.begin(), item27.end(), '\"','\0' ); replace(item28.begin(), item28.end(), '\"','\0' ); replace(item29.begin(), item29.end(), '\"','\0' ); replace(item30.begin(), item30.end(), '\"','\0' ); // cout<< item; MYSQL_RES *res_set; MYSQL_ROW row; mysql_query (connect,"select * from `test.csv` WHERE `1` ='"+item+"'"); res_set = mysql_store_result(connect); if(mysql_fetch_row(res_set) != NULL ){ cout << "jop" ; }else{ cout << "no"; } } } }
-
Obligatorische Überarbeitung des Codes:
int main(){ using std::string; using std::basic_string; unsigned int i; //unnötig MYSQL *connect = mysql_init(NULL); if (!connect) { cout<<"MySQL Initialization failed"; return 1; } connect = mysql_real_connect(connect, "localhost", "root", "XXXXX", "pool", 0, NULL, 0); //Erneute Zuweisung zu "connect" nicht nötig if (connect) { cout<<"connection Succeeded\n"; } else { cout<<"connection failed\n"; } ifstream inFile ("test.csv"); string queryText; string line; int linenum = 0; while (getline (inFile, line)) { linenum++; if(linenum < 1) { cout<<"Beide Zahlen sind gleich"; //tritt nie ein !! } if(linenum > 1) //warum nicht else ? { istringstream linestream(line); string items[30]; //int itemnum = 0; char Dezimal_fuer_A = 34; //Stuss - müsste 65 sein. Warum eigentlich nicht einfach 'A' ? for(int i=0; i<30; i++) getline(linestream, items[i], '|'); using std::replace; for(int i=0; i<30; i++) replace(items[i].begin(), items[i].end(), '\"', '\0'); // das sieht nicht sinnig aus MYSQL_RES *res_set; MYSQL_ROW row; mysql_query (connect,"select * from `test.csv` WHERE `1` ='" + item + "'"); res_set = mysql_store_result(connect); if(mysql_fetch_row(res_set) != NULL ){ cout << "jop" ; }else{ cout << "no"; } } } }
Vergleichs mal und denk über die Unterschiede/Kommentare nach.
Und was genau ist nun eigentlich das Problem ?
-
danke für die überarbeitung
mein Problem dabei ist das er beimysql_query (connect,"select * from `zalando` WHERE `1` ='" + item + "'");
da schreit er immer rum cannot convert ‘std::basic_string<char>’ to ‘const char*’ for argument ‘2’ to ‘int mysql_query(MYSQL*, const char*)’
replace(items[i].begin(), items[i].end(), '\"', '\0'); // habe die ternung "|"
-
greeneye85 schrieb:
da schreit er immer rum cannot convert ‘std::basic_string<char>’ to ‘const char*’ for argument ‘2’ to ‘int mysql_query(MYSQL*, const char*)’
Lies mal das String-Kapitel des C++-Grundlagen-Buchs deiner Wahl.
-
Hint:
std::string query = "select * from `zalando` WHERE `1` ='" + item + "'";
Wobei du deine User-Eingaben auch nochmal durch
mysql_real_escape_string
durchjagen solltest, sonst fängst du dir eine wunderschöne Sicherheitslücke ein.
-
nman danke für den hinweis habe ich ab geändert