这是一个连接到 MySQL 服务器并在 linux 平台上从具有单个查询的文本文件执行 SQL 查询的 C 程序。
在这里,首先建立与数据库服务器的连接。
下一行
show tables
从名为“text.txt”的文本文件中读取
这存储在一个名为 line 的字符串中。并且这个字符串被传递给 MySQL C API 的函数 mysql_query。然后 MySQL 数据库将返回结果,即使用函数 mysql_use_result 的表名。
以上应该是这段代码的正确工作。
但是在将字符串、行(包含文件“text.txt”的数据)传递给 mysql_query() 的过程中出现了一些错误。
错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�����o���+N�J�O�Q�' at line 2
这意味着一些垃圾值也通过字符串,行与文件中的实际数据一起传递。那么我该如何纠正这个问题。
代码:
#include mysql.h
#include stdio.h
main()
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "1"; /* set me first */
char *database = "mysql";
conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
/*reading query from text file*/
int fd,i=0;
char line[300];
char ch1;
FILE *fp;
fp =fopen("text.txt","r");
if(fp ==NULL )
{
printf("File open error.\n");
exit(-1);
}
ch1 = getc(fp);
while (ch1 != EOF)
{
line[i]=ch1;
ch1 = getc(fp);
i++;
}
printf("%s",line);
fclose(fp);
/* send SQL query */
if (mysql_query(conn,line )) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
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);
}