Экранирование или использование строки C в операторе SQL

0

Я использую API-интерфейс Connector C для подключения к базе данных mysql. У меня проблема с использованием значения строки ac в инструкции sql.

char *somequery = "SELECT username, password from tableABC WHERE username='john'";

Вышеуказанное работает отлично, если я пользователь простой текст "john". Но если я заменил его на строку (которая установлена ранее в программе), она не работает и разбивается с ошибкой 500.

char *ghob = "john";
char *somequery = "SELECT username, password from tableABC WHERE username=ghob";

Я пробовал несколько вещей, но безуспешно. Любая помощь будет оценена по достоинству.

Теги:
string
escaping

1 ответ

1
Лучший ответ

sprintf() позволяет хранить форматированные данные в виде строки. Используя sprintf(), вы можете сохранить значение ghob в somequery.

Как показано ниже.

#define MAX_QUERY_LENGTH 1024 //defines max possible query lengh

char *somequery = malloc(sizeof(char) * MAX_QUERY_LENGTH);
char *ghob = "bobmarley";
sprintf(somequery, "SELECT username, password from tableABC WHERE username='%s'",ghob);

Или же

char somequery[MAX_QUERY_LENGTH];
char *ghob = "bobmarley";
sprintf(somequery, "SELECT username, password from tableABC WHERE username='%s'",ghob);

В любом случае все должно быть хорошо.

  printf("%s", somequery);

печать somequery приведет к

SELECT username, password from tableABC WHERE username='bobmarley'
  • 0
    SQL-запрос не требует одинарных кавычек? username = '% s' - правильный путь?
  • 0
    Да, конечно...
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню