用c访问mysql出现的问题

hutuyang 发布于 2013/04/15 08:25
阅读 599
收藏 2

一个简单的用c接口访问mysql的程序,读取一个table中的内容:

#include <mysql/mysql.h>
#include <stdio.h>

int main()
{
	MYSQL *mysql;
	MYSQL_RES *res;
	MYSQL_ROW row;
	char *query = "select * from data_import";
	int t, r;
	
	//init
	mysql_init(mysql);
	if (!mysql_real_connect(mysql, "localhost", "root", "lijun", "emp",
			0, NULL, 0)) {
		printf("Error connecting to database: %s\n", mysql_error(mysql));
	} else {
		printf("Connected ...\n");
	}	
	//SELECT * FROM USERNAME
	t = mysql_query(mysql, query);
	if (t) {
		printf("Error making query: %s\n", mysql_error(mysql));
	} else {
		printf("Query made...\n");
		res = mysql_use_result(mysql);
		if (res) {
			for (r = 0; r <= mysql_field_count(mysql); r++) {
				row = mysql_fetch_row(res);
				if (row < 0) {
					break;
				}
				for (t = 0; t < mysql_num_fields(res); t++) {
					printf("%s", row[t]);
				}
				printf("\n");
			}
		}
		mysql_free_result(res);
	}
	mysql_close(mysql);
	
}
结果:

Connected ...
Query made...
temp: 4 HAN 28 Beijing footbal 
temp: 3 JIM 26 Shangdong footb 
temp: 2 LIU 27 Heihei football 
temp: 5 MENG 25 Beijing tennis 
Segmentation fault

自个调试半天,无结果,求解释


加载中
0
hnynes
hnynes

测试了下,主要问题是你的对象的初始化问题,其它代码都没有什么问题.

MYSQL *mysql;
这行改为  MYSQL *mysql = new MYSQL;

再在main的最后加上delete mysql;

官方文档上有例子:

MYSQL mysql;

mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
    fprintf(stderr, "Failed to connect to database: Error: %s\n",
          mysql_error(&mysql));
}

0
文耳兑心
文耳兑心
没看出什么毛病,下断点跟进调试吧
hutuyang
hutuyang
我试着调试过,在 printf("%s ", row[t]); 出报错,但我找不出原因
0
Z
ZYud

或许有一条记录为NULL的记录.

printf时内容指向0

hutuyang
hutuyang
本来表中有NULL,我将那一列删除后,还是这样。
0
LoveCupid
LoveCupid

 for (r = 0; r <= mysql_field_count(mysql); r++) {

r越界了吧?

hutuyang
hutuyang
改了,r < mysql_field_count() ,还是这样
0
hutuyang
hutuyang
+------+------+------+-----------------+
| id   | name | age  | address         |
+------+------+------+-----------------+
| 4    | HAN  | 28   | Beijing footbal |
| 3    | JIM  | 26   | Shangdong footb |
| 2    | LIU  | 27   | Heihei football |
| 5    | MENG | 25   | Beijing tennis  |
| 1    | TOM  | 24   | BeiJing footbal |
+------+------+------+-----------------+
这个是data_import 表
0
王亜鋒
王亜鋒
for (t = 0; t < mysql_num_fields(res); t++) {
					printf("%s", row[t]);
				}
这个for循环逻辑上是错的,不应该是row[t],应该是fields[t]

hutuyang
hutuyang
fiels[t] ??, 没有定义fiels 阿
0
超级玛丽变身
超级玛丽变身

代码我运行是直接core的,换成:

//init

mysql = mysql_init(NULL);

后没问题啊。mysql版本:

mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (x86_64) using readline 6.2

 

返回顶部
顶部