Where Clause mit Variable
-
Also ich habs nun mit dieser Quelle
http://wiki.wxwidgets.org/WxStringversucht umzusetzen, allerdings ist mir das noch nicht ganz gelungen.
wxString query = wxT("SELECT pass FROM users WHERE uname='"+(const char*)uname.mb_str(wxConvUTF8)+"'");Die Fehlermeldung lautet nun so:
invalid operands of types `const wchar_t[37]' and `const char*' to binary `operator+'|Hat noch jemand nen Tipp für mich ?
-
wxTist anscheinend ein Makro, was in deinem Fall so definiert wurde, dass es einLeinem Stringliteral voranstellt. AlsowxT("hello")-->L"hello". Das erklärt auch Deine Fehlermeldung; dennL"hello"ist ein Array vom Typconst wchar_t[37]und hat als solches keinen überladenen + Operator. Du musst deine Stringkonstante also erst zu einem wxString konvertieren.
-
krümelkacker schrieb:
...denn
L"hello"ist ein Array vom Typconst wchar_t[37]...Ist natürlich eine 6 statt 37 in diesem Fall.

-
Spätestens jetzt bin ich total verwirrt
Ich weiß grad nicht mehr was ich zu was konvertieren soll .....EDIT:
Gibt es bei der ganzen Sache nicht die möglichkeit das in der Art zu lösen ?wxString query = wxT("SELECT pass FROM users WHERE uname='%s'"),uname
-
Ich glaube ich komme dem ganzen etwas näher.
wxString uname = m_loginusername->GetValue(); if (un == uname) { char* chars = "SELECT pass FROM users WHERE uname = '%s'",uname; wxString query(chars, wxConvUTF8); wxSQLite3ResultSet pass = db->ExecuteQuery(query);Allerdings bekomme ich nun den hinweis das "uname" eine nicht verwendete Variable sei und die Abfrage funktioniert noch nicht.
-
Was ich dir eigentlich sagen wollte, ist, dass du es genau andersrum machen solltest als du es nach meinem Rat gemacht hast

Du solltest den const char * in einen WxString umwandeln, nicht umgekehrt. WxString kennt nämlich den Operator +, const char* nicht.
Etwas wie dies sollte funktionieren:
wxSQLite3ResultSet pass = db->ExecuteQuery(wxT(wxString::FromAscii("SELECT pass FROM users WHERE uname=\'")+uname+wxString::FromAscii("\'")));Beachte außerdem, dass ich die Hochkommata ' durch die Escape-Sequenz \' ersetzt habe, da dein Compiler ansonsten verwirrt sein dürfte.
-
Danke SeppJ
Wenn ich deinen Code direkt in mein Prog einsetze ommt folgende Fehlermeldung
In member function `virtual void SEAdminDialog::m_BTNLoginOnButtonClick(wxCommandEvent&)':| `LwxString' has not been declared| `FromAscii' was not declared in this scope| |26|warning: unused variable 'FromAscii'| ||=== Build finished: 2 errors, 1 warnings ===|Ich hab es nun nach viel googlen und Samples anschauen folgendermaße gelöst:
wxString query; query << wxT("SELECT pass FROM users WHERE uname = '") << uname << wxT("'"); wxSQLite3ResultSet pass = db->ExecuteQuery(query);Funktionieren tut es wie gewünscht .... allerdings graut mir davor wenn ich dann gleich das erste mal Daten aus der DB gegen die ID (INT) auslese ... da geht das Thema sicher weiter ..... falls also wer Verbesserungsvorschläge hat nehm ich die gern mit

-
allerdings graut mir davor wenn ich dann gleich das erste mal Daten aus der DB gegen die ID (INT) auslese ... da geht das Thema sicher weiter ..... falls also wer Verbesserungsvorschläge hat nehm ich die gern mit

Wie wär's damit, richtig C++ zu lernen? (so mit Buch und so) :p
-
nalamar schrieb:
Funktionieren tut es wie gewünscht ....
Bis jemand für uname
'; DROP TABLE users;--eingibt. Du solltest dringend prüfen, ob deine Datenbank-API parametrisierte Abfragen anbietet.
-
krümelkacker schrieb:
Wie wär's damit, richtig C++ zu lernen? (so mit Buch und so) :p
Ich versuchs halt auf die harte "Learning by doing" tour - und ich danke jedem der sich die Zeit nimmt, auf meine Beiträge zu Antworten.

MFK schrieb:
nalamar schrieb:
Funktionieren tut es wie gewünscht ....
Bis jemand für uname
'; DROP TABLE users;--eingibt. Du solltest dringend prüfen, ob deine Datenbank-API parametrisierte Abfragen anbietet.
Über die Gefahr der SQL-Injektions bin ich mir durchaus bewusst. Diese abzufangen steht auf meiner ToDO-Liste. Aber ich weiß auch, das die Leute die irgend wann mal mit dem Programm arbeiten können, davon auch nicht wirklich Ahnung haben, was das ganze nicht allzuweit oben auf meiner Liste ansiedelt. Aber trotzdem danke nochmal für den Hinweis!

Der Nala