2017-01-14 7 views
0

Ich versuche, ein Feld in eine MySQL-DB einzufügen, aber es funktioniert nicht.mysql Query Einfügen funktioniert nicht

Ich habe versucht, um abit mit nur "in Bild einfügen" zu ändern, mit einer Abfrage Zeichenfolge, die nicht im String Literal. Ich sah here zu versuchen, zu verstehen, ob die Syntax anders oder etwas war.

Ich denke, ich mache es nach der API.

Here mein Setup

Vom löschte ich

bekommen hier
i = 1 
MySQL Tables in mysql database: 
images 

der Code ist.

Irgendwelche Ideen?

/* Simple C program that connects to MySQL Database server*/ 
#include <mysql.h> 
#include <stdio.h> 
#include <stdlib.h> 
    int main() { 
     MYSQL *conn; 
     MYSQL_RES *res; 
     MYSQL_ROW row; 
     char *server = "localhost"; 
     char *user = "root"; 
     //set the password for mysql server here 
     char *password = "********"; 
     char *database = "myDB"; 
     conn = mysql_init(NULL); 
     if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) 
     { 
      fprintf(stderr, "%s\n", mysql_error(conn)); 
      exit(1); 
     } 
     /* send SQL query */ 
     if (mysql_query(conn, "show tables") == 1) 
     { 
      fprintf(stderr, "%s\n", mysql_error(conn)); 
      exit(1); 
     } 
    int i = mysql_query(conn ,"INSERT INTO `myDB`.`images` (`id`, `date`, `path`) VALUES (NULL, CURRENT_TIMESTAMP, 'mypath/foo/bar')"); 
    printf("i = %d \n", i); 
     res = mysql_use_result(conn); 
     /* output table name */ 
     printf("MySQL Tables in mysql database:\n"); 
     while ((row = mysql_fetch_row(res)) != NULL) 
     { 
      printf("%s \n", row[0]); 
     } 
     /* close connection */ 
     mysql_free_result(res); 
     mysql_close(conn); 
    return 0; 
    } 
+0

Wenn nur MySQL-Bibliothek hat eine Funktion, die Fehlermeldung zu erhalten, http://dev.mysql.com/doc/refman/5.7/en/mysql -error.html. Übrigens habe ich dir das ";" vergessen. – Stargateur

+0

Eine 'insert'-Abfrage muss festgeschrieben werden. Wenn dies nicht der Fall ist, wird keine Einfügung ausgeführt. Und es erzeugt keine Ergebnisse, die abgerufen werden könnten. – DyZ

+0

Können Sie ein Beispiel geben @ DYZ – Jacob

Antwort

1

id Unter der Annahme ist die primäre ID und INT, kann es Auto-Inkrement sein. Wenn das der Fall ist, nehmen Sie id aus Ihrer Aussage heraus.

Es wäre hilfreich, die Frage zu beantworten, wenn wir das Format der Tabelle kannten. Dies wird angenommen, date ist TIMESTAMP und path ist CHAR oder höchstwahrscheinlich VARCHAR.

+0

Yed ID ist Primärschlüssel. Es gibt einen Link zu einem Bild der Tabelle in der Q. ID ist AI – Jacob

+0

Daher wird es wird von der Datenbank automatisch mit einer Nummer versehen, so dass sie im INSERT übersprungen werden kann. Versuchen Sie die Anweisung, die ich zur Verfügung gestellt habe. – mrUlrik

+0

Nein, es ist dasselbe. Ich bekomme respons i = 1 und nichts ändert sich in myDB. – Jacob

0

bestätigen, dass Ihre ID-Spalte nicht ein Primärschlüssel ist, weil Primärschlüssel nicht null-Spalten erlaubt es

+0

ID ist primär. Aber ich benutze AI. Die Abfrage wurde extrahiert von phpmyadmin Und es funktionierte dort: s – Jacob

+0

Das passt besser als Kommentar. – alk

0

ich es arbeitet jetzt bekommen verwaltet. Ich fand einige Beispiele here, die ich versuchte, neu zu erstellen und es funktioniert.

Es ist nicht ganz gleich wie andere Abfrage

 if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) 
    { 
     fprintf(stderr, "%s\n", mysql_error(conn)); 
     exit(1); 
    } 
    if (mysql_query(conn ,"INSERT INTO images VALUES (NULL , CURRENT_TIMESTAMP , 'awesome')")) 
    { 
    fprintf(stderr, "Error: could not execute query \n"); 
     exit(1); 
    } 
    int my_bool = mysql_commit(conn); 

    mysql_free_result(res); 
    mysql_close(conn); 
return 0;