初学MySQL,记录一下MySQL用c语言编程时遇到的问题。
这是我的源程序:
1
int
main(
void
)
2
{
3
MYSQL *mysql=
NULL;
4
5
6
if
((mysql=mysql_init(mysql))==
NULL)
7
{
8
fprintf(stderr,
"
Cannot initialize MySQL
"
);
9
return
1
;
10
}
11
if
(mysql_real_connect(mysql,
"
localhost
"
,
"
kerry
"
,
"
beck123
"
,NULL,
0
,NULL,
0
)==
NULL)
12
{
13
fprintf(stderr,
"
%d:%s \n
"
,mysql_errno(mysql),mysql_error(mysql));
14
return
1
;
15
}
16
printf(
"
Succeed!\n
"
);
17
return
0
;
18
}
MySQL的c API有几个重要的数据类型:
-
MYSQL
该结构代表 1 个数据库连接的句柄。几乎所有的 MySQL 函数均使用它。不应尝试拷贝 MYSQL 结构。不保证这类拷贝结果会有用
-
该结构代表返回行的查询结果( SELECT , SHOW , DESCRIBE , EXPLAIN )。在本节的剩余部分,将查询返回的信息称为“结果集”。
-
这是 1 行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据,不能将其当作 由Null 终结的字符串对待,这是因为这类值可能会包含 Null 字节)。行是通过调用 mysql_fetch_row() 获得的。
-
该结构包含关于字段的信息,如字段名、类型和大小。这里详细介绍了其成员。通过重复调用 mysql_fetch_field() ,可为每个字段获得 MYSQL_FIELD 结构。字段值不是该结构的组成部份,它们包含在 MYSQL_ROW 结构中。
-
这是 MySQL 字段列表偏移量的“类型安全”表示(由 mysql_field_seek() 使用 )。偏移量是行内的字段编号,从 0 开始。
声明“MYSQL *mysql=NULL;“,必须为该指针赋值为NULL。如果定义为"MYSQL *mysql;",不为该指针赋值,就会生成野指针,程序运行时会发生“段错误 (核心已转储)“错误。
“野指针”不是NULL指针,是指向“垃圾”内存(不可用内存)的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if无法判断一个指针是正常指针还是“野指针”。有个良好的编程习惯是避免“野指针”的唯一方法。
调用mysql_init()函数,该函数会 分配或初始化与 mysql_real_connect() 相适应的 MYSQL 对象。 如果 mysql 是 NULL 指针, 该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果 mysql_init() 分配了新的对象,当调用 mysql_close() 来关闭连接时。将释放该对象。

