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 bei

    mysql_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


Log in to reply