Query wird nicht ausgeführt
-
Basierend auf dem Code von elise hier: http://www.c-plusplus.net/forum/viewtopic.php?t=39524 habe ich versucht mit meiner MySQL-DB zu kommunizieren. Die Verbindung klappt auch, allerdings liefert mysql_real_query -1 zurück, d.h. es wird nicht ausgeführt - wieso?
Die Tabelle existiert auch mit den angesprochenen Spalten.@Win XP, VC++.NET 2003
#include <windows.h> #include <string.h> #include <C:/mysql/include/mysql.h> #include <time.h> #include <stdio.h> void db_query(MYSQL *mysql, const char *anfrage) { int erg = mysql_real_query(mysql, anfrage, strlen(anfrage)); } int main () { MYSQL_RES *mTabelle; MYSQL_ROW mRecord; MYSQL *mConnection, mDB; int mError; mysql_init(&mDB); mConnection = mysql_real_connect(&mDB,"127.0.0.1","root","","hp",0,0,0); if (mConnection == NULL) { printf("Es konnte keine Verbindung zur Datenbank hergestellt werden: %s",mysql_error(&mDB)); return 1; } else { printf("Es wurde erfolgreich eine Verbindung hergestellt!"); db_query(&mDB, "INSERT INTO Packstuecke(Nummer, Status, Zeit, SNr) VALUES(99940306644303469171, 054, 20060801094500)"); } mysql_close(mConnection); return 0; }
-
Du gibst in Deinem Query an, dass Du 4 Spalten füllen willst, gibst aber als Werte nur 3 Spalten an.
-
erstmal brauchste keine extra funktion um nullterminierte strings abzuschicken. dafür gibt es 'mysql_query'.
und: wenn 'mysql_query' bzw. 'mysql_real_query' keine 0 zurückgeben, dann kannste die die fehlermeldung mit 'mysql_error' abholen.
beispiel:bool db_query(MYSQL *mysql, const char *anfrage) { if (mysql_query (mysql, anfrage)) { printf ("mysql_error: %s\n", mysql_error(mysql)); return false; } return true; }
-
@mantiz: *patsch* Stimmt, danke
@net:
Ich hab das nur gemacht, weil ich gelesen habe, dass die Performance von mysql_real_query besser sein soll und bei mysql_query unter bestimmten Umständen ein Buffer overrun auftreten kann. Und ich wollte mir halt das strlen() bei jedem Aufruf sparen
-
UNeverNo schrieb:
@net:
Ich hab das nur gemacht, weil ich gelesen habe, dass die Performance von mysql_real_query besser sein soll und bei mysql_query unter bestimmten Umständen ein Buffer overrun auftreten kann. Und ich wollte mir halt das strlen() bei jedem Aufruf sparenach so. na, dann vergiss was ich geschrieben hab'
-
Hab nochmal eine andere Frage - wie kann ich zurückgegebene Datensätze bei einem SELECT verarbeiten?
ergebnis = mysql_store_result(&mysql); if (ergebnis) // Es gibt Zeilen { //was muss hier rein? }
-
UNeverNo schrieb:
//was muss hier rein?
z.b. solange 'mysql_fetch_row' aufrufen um alle zeilen abzuholen (bis 0 zurückgegeben wird)
-
Jetzt tritt ein Fehler auf, anscheinend werden die Spalten anders als in PHP angesprochen.
erg = mysql_store_result(&mDB); if (erg) { anz_felder = mysql_num_fields(erg); while (zeile = mysql_fetch_row(erg)) { printf("SNr = %s", zeile['SNr']); //Unbehandelte Ausnahme bei 0x00401112 in myTest.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x0181e6b0. } }
-
UNeverNo schrieb:
printf("SNr = %s", zeile['SNr']); // Unbehandelte Ausnahme bei 0x00401112 in myTest.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x0181e6b0.
c hat keine assoziativen arrays. musst 'ne zahl nehmen, keinen string...
-
Danke soweit schon mal für Deine Hilfe
Jetzt habe ich noch einen Fehler, finde ihn aber nicht.
#include <windows.h> #include <string.h> #include <C:/mysql/include/mysql.h> #include <time.h> #include <stdio.h> int db_query(MYSQL *mysql, const char *anfrage, int index) //schreibt in DB oder liefert GENAU einen Wert zurück { MYSQL_RES *erg; MYSQL_ROW zeile; //unsigned int anz_felder; int err = mysql_real_query(mysql, anfrage, strlen(anfrage)); if (err != 0) printf("Abfrage %s konnte nicht erfolgreich ausgefuehrt werden!", anfrage); if (index != -1) { erg = mysql_store_result(mysql); if (erg) { //anz_felder = mysql_num_fields(erg); while (zeile = mysql_fetch_row(erg)) { return ((int)zeile[index]); } } } return -1; } int main () { MYSQL *mConnection, mDB; int mError; mysql_init(&mDB); mConnection = mysql_real_connect(&mDB,"127.0.0.1","root","","hp",0,0,0); if (mConnection == NULL) { printf("Es konnte keine Verbindung zur Datenbank hergestellt werden: %s",mysql_error(&mDB)); return 1; } else { printf("Es wurde erfolgreich eine Verbindung hergestellt!"); /*c:\Dokumente und Einstellungen\Chris\Desktop\libmysqltest\myTest.c(47): error C2143: Syntaxfehler: Es fehlt ';' vor 'eingeben' */ int erg = db_query(&mDB, "SELECT * FROM Packstuecke", 3); } mysql_close(mConnection); return 0; }
Vor eingeben? Bei mir ist nix mit eingeben...