나는 (로컬로) 내 mysql 데이터베이스 (ANSI C)에 연결하는 mysql 스 니펫을 사용하고 있습니다. 모든 것이 완벽하게 작동하지만, 내 데이터베이스에 연결하고 다음을 삽입하는 함수를 만들려고했습니다. 일부 변수에 기초한 새로운 기록. sprintf를 사용하여 이러한 변수를 잡아 내 SQL 쿼리를 구성합니다. 나는 준비가 내 변수와 내 SQL이 있으면mysql_query와 함께 sprintf 사용하기
문제
, 나는하여 mysql_query까지 보낼 수 있습니다. 아쉽게도 예상대로 작동하지 않으며 프로그램이 충돌하고 버퍼 오버 플로우를보고합니다.
다음은 문제를 설명하는 데 도움이되는 전반적인 기능입니다.
#include <mysql.h>
#include <string.h>
#include <stdio.h>
char *table = "test_table"; // table is called test_table
char *column = "value"; // column is called value
char *value = "working"; // what value we are inserting
char *query; // what we are sending to mysql_query
sprintf(query, "INSERT INTO %s (%s) VALUES ('%s')", table, column, value);
if (mysql_query(conn, query)) {
fprintf(stderr, "%s\n", mysql_error(conn));
return;
}
목적
전체 기능의 목적은 그래서 내 프로그램에서 SQL 삽입 또는 업데이트 문을 다시 작성 보관하지 않아도됩니다. 하나의 함수를 호출하여 테이블, 열 및 해당 열의 값을 식별하는 몇 가지 매개 변수를 전달하려고합니다.
모든 도움을 주시면 감사하겠습니다. 나는 요즘 C에서 약간 녹슬 었어.
질문
왜 mysql_query가 문자열을 보낼 수 없습니까?
변경 사항
이것은 설명에 따라 작동했습니다.
"질문"에서 볼 수없는 질문이 있습니까? 아니면 잊었 니? –
'query'에 메모리를 할당하지 마십시오. 유효한 위치를 가리 키지는 않습니다. 나는 당신이 좋은 초보자의 C 프로그래밍 가이드를 읽으라고 제안한다. SQL로 엉망이되기 전에, [little Bobby tables] (http://bobby-tables.com)가있을 것이기 때문이다. –
그리고'query'는 "아무 데"를 가리키는 포인터이기 때문에이 코드가 충돌하는 것 같아요. –