MYSQL API в C - Linux - PullRequest
       14

MYSQL API в C - Linux

0 голосов
/ 25 февраля 2012

Я не могу заставить работать следующий код. Он работает с обычным выбором или вставкой, но когда я пытаюсь вставить переменную, он не работает. Может кто-нибудь, дайте мне знать, пожалуйста, что здесь не так?

Обратите внимание, что вывод ниже.

int main(int argc, char **argv)
{

  MYSQL *conn;
  char str[100] = "test";
  conn = mysql_init(NULL);

  char stmt_buf[100];
  sprintf (stmt_buf, "insert into test values ('%s')", str);

  printf("\n%s\n",stmt_buf);

  mysql_query (conn, stmt_buf);
  mysql_close(conn);
  return 0;
}

~$./version

insert into test values ('test')
Segmentation fault

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

Вы не проверяете ошибки.Я предполагаю, что conn == NULL.

Для записи, никогда не используйте sprintf.Вместо этого используйте snprintf, то есть, если вы в порядке с SQL-инъекциями.

1 голос
/ 25 февраля 2012

Я не видел, что вы подключены к базе данных по mysql_real_connect, также нет вызовов mysql_select_db и mysql_exec_sql.

Вот пример для вас.

int main(int argc, char **argv)
{
    MYSQL mysql;
    char stmt_buf[100];
    if (mysql_init(&mysql) == NULL) {
        printf("Can not initialize");
        exit(1);
    }
    if (!mysql_real_connect
        (&mysql, "localhost", "USERNAME", "PASSWORD", NULL, 0, NULL, 0)) {
        mysql_error(&mysql);
        exit(1);
    }

    if (mysql_select_db(&mysql, "DATABASENAME")) {
        mysql_error(&mysql);
        exit(1);
    }

    sprintf(stmt_buf, "insert into test values ('%s')", "test");

    if (mysql_exec_sql(&mysql, stmt_buf))
        mysql_error(&mysql));

    mysql_close(&mysql);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...