当前位置: 首页 > news >正文

最新做做网站linux搭建个人网站

最新做做网站,linux搭建个人网站,wordpress模板添加支付,芜湖十大企业排名在实际应用中#xff0c;我们不可能在命令行登录进数据库进行数据的查询、插入等操作#xff0c;用户一般是使用一个界面良好的应用程序软件来对数据进行管理。为了方便应用程序的开发#xff0c;MySQL提供了多种编程语言#xff08;C、perl、php等#xff09;的编程接口我们不可能在命令行登录进数据库进行数据的查询、插入等操作用户一般是使用一个界面良好的应用程序软件来对数据进行管理。为了方便应用程序的开发MySQL提供了多种编程语言C、perl、php等的编程接口供开发者使用。 对于C语言来说MySQL提供了C语言客户机库它允许从任何C程序的内部访问MySQL数据库客户机实现API,API定义了客户机如何建立和执行与服务器的通信。使用C语言开发MySQL项目具有更好的安全性和性能C语言API是与MySQL一起提供的包含在mysqlclient库文件中用于连接和执行数据库查询。 首先看一下MySQL为C语言操作定义的数据类型。 1. MYSQLMYSQL结构代表一个数据库连接句柄包含有关服务器的连接状态的信息几乎所有函数都是用到它。其定 义如下 typedef struct st_mysql {NET net; /* Communication parameters */unsigned char *connector_fd; /* ConnectorFd for SSL */char *host,*user,*passwd,*unix_socket,*server_version,*host_info;char *info, *db;struct charset_info_st *charset;MYSQL_FIELD *fields;MEM_ROOT field_alloc;my_ulonglong affected_rows;my_ulonglong insert_id; /* id if insert on table with NEXTNR */my_ulonglong extra_info; /* Not used */unsigned long thread_id; /* Id for connection in server */unsigned long packet_length;unsigned int port;unsigned long client_flag,server_capabilities;unsigned int protocol_version;unsigned int field_count;unsigned int server_status;unsigned int server_language;unsigned int warning_count;struct st_mysql_options options;enum mysql_status status;my_bool free_me; /* If free in mysql_close */my_bool reconnect; /* set to 1 if automatic reconnect *//* session-wide random string */char scramble[SCRAMBLE_LENGTH1];/*Set if this is the original connection, not a master or a slave we haveadded though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()*/my_bool rpl_pivot;/*Pointers to the master, and the next slave connections, points toitself if lone connection.*/struct st_mysql* master, *next_slave;struct st_mysql* last_used_slave; /* needed for round-robin slave pick *//* needed for send/read/store/use result to work correctly with replication */struct st_mysql* last_used_con;LIST *stmts; /* list of all statements */const struct st_mysql_methods *methods;void *thd;/*Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flagfrom mysql_stmt_close if close had to cancel result set of this object.*/my_bool *unbuffered_fetch_owner;/* needed for embedded server - no net buffer to store the info */char *info_buffer;void *extension; } MYSQL; 2. MYSQL_RES MYSQL_RES结构代表返回行的查询结果SELECT、SHOW、DESCRIBE等从数据库读取数据最后就是从MYSQL_RES中读取数据。 MYSQL_RES定义如下 typedef struct st_mysql_res {my_ulonglong row_count;MYSQL_FIELD *fields;MYSQL_DATA *data;MYSQL_ROWS *data_cursor;unsigned long *lengths; /* column lengths of current row */MYSQL *handle; /* for unbuffered reads */const struct st_mysql_methods *methods;MYSQL_ROW row; /* If unbuffered read */MYSQL_ROW current_row; /* buffer to current row */MEM_ROOT field_alloc;unsigned int field_count, current_field;my_bool eof; /* Used by mysql_fetch_row *//* mysql_stmt_close() had to cancel this result */my_bool unbuffered_fetch_cancelled; void *extension; } MYSQL_RES; MySQL 有如下C语言API 函数 描述 mysql_affected_rows() 返回上次UPDATE、DELETE或INSERT查询更改删除插入的行数。 mysql_autocommit() 切换 autocommit模式ON/OFF mysql_change_user() 更改打开连接上的用户和数据库。 mysql_charset_name() 返回用于连接的默认字符集的名称。 mysql_close() 关闭服务器连接。 mysql_commit() 提交事务。 mysql_connect() 连接到MySQL服务器。该函数已不再被重视使用mysql_real_connect()取代。 mysql_create_db() 创建数据库。该函数已不再被重视使用SQL语句CREATE DATABASE取而代之。 mysql_data_seek() 在查询结果集中查找属性行编号。 mysql_debug() 用给定的字符串执行DBUG_PUSH。 mysql_drop_db() 撤销数据库。该函数已不再被重视使用SQL语句DROP DATABASE取而代之。 mysql_dump_debug_info() 让服务器将调试信息写入日志。 mysql_eof() 确定是否读取了结果集的最后一行。该函数已不再被重视可以使用mysql_errno()或mysql_error()取而代之。 mysql_errno() 返回上次调用的MySQL函数的错误编号。 mysql_error() 返回上次调用的MySQL函数的错误消息。 mysql_escape_string() 为了用在SQL语句中对特殊字符进行转义处理。 mysql_fetch_field() 返回下一个表字段的类型。 mysql_fetch_field_direct() 给定字段编号返回表字段的类型。 mysql_fetch_fields() 返回所有字段结构的数组。 mysql_fetch_lengths() 返回当前行中所有列的长度。 mysql_fetch_row() 从结果集中获取下一行 mysql_field_seek() 将列光标置于指定的列。 mysql_field_count() 返回上次执行语句的结果列的数目。 mysql_field_tell() 返回上次mysql_fetch_field()所使用字段光标的位置。 mysql_free_result() 释放结果集使用的内存。 mysql_get_client_info() 以字符串形式返回客户端版本信息。 mysql_get_client_version() 以整数形式返回客户端版本信息。 mysql_get_host_info() 返回描述连接的字符串。 mysql_get_server_version() 以整数形式返回服务器的版本号。 mysql_get_proto_info() 返回连接所使用的协议版本。 mysql_get_server_info() 返回服务器的版本号。 mysql_info() 返回关于最近所执行查询的信息。 mysql_init() 获取或初始化MYSQL结构。 mysql_insert_id() 返回上一个查询为AUTO_INCREMENT列生成的ID。 mysql_kill() 杀死给定的线程。 mysql_library_end() 最终确定MySQL C API库。 mysql_library_init() 初始化MySQL C API库。 mysql_list_dbs() 返回与简单正则表达式匹配的数据库名称。 mysql_list_fields() 返回与简单正则表达式匹配的字段名称。 mysql_list_processes() 返回当前服务器线程的列表。 mysql_list_tables() 返回与简单正则表达式匹配的表名。 mysql_more_results() 检查是否还存在其他结果。 mysql_next_result() 在多语句执行过程中返回/初始化下一个结果。 mysql_num_fields() 返回结果集中的列数。 mysql_num_rows() 返回结果集中的行数。 mysql_options() 为mysql_connect()设置连接选项。 mysql_ping() 检查与服务器的连接是否工作如有必要重新连接。 mysql_query() 执行指定为“以Null终结的字符串”的SQL查询。 mysql_real_connect() 连接到MySQL服务器。 mysql_real_escape_string() 考虑到连接的当前字符集为了在SQL语句中使用对字符串中的特殊字符进行转义处理。 mysql_real_query() 执行指定为计数字符串的SQL查询。 mysql_refresh() 刷新或复位表和高速缓冲。 mysql_reload() 通知服务器再次加载授权表。 mysql_rollback() 回滚事务。 mysql_row_seek() 使用从mysql_row_tell()返回的值查找结果集中的行偏移。 mysql_row_tell() 返回行光标位置。 mysql_select_db() 选择数据库。 mysql_server_end() 最终确定嵌入式服务器库。 mysql_server_init() 初始化嵌入式服务器库。 mysql_set_server_option() 为连接设置选项如多语句。 mysql_sqlstate() 返回关于上一个错误的SQLSTATE错误代码。 mysql_shutdown() 关闭数据库服务器。 mysql_stat() 以字符串形式返回服务器状态。 mysql_store_result() 检索完整的结果集至客户端。 mysql_thread_id() 返回当前线程ID。 mysql_thread_safe() 如果客户端已编译为线程安全的返回1。 mysql_use_result() 初始化逐行的结果集检索。 mysql_warning_count() 返回上一个SQL语句的告警数。 显示详细信息 与MySQL交互时应用程序应使用该一般性原则 1. 通过调用mysql_library_init()初始化MySQL库。库可以是mysqlclient C客户端库或mysqld嵌入式服务器库具体情况取决于应用程序是否与“-libmysqlclient”或“-libmysqld”标志链接。 2. 通过调用mysql_init()初始化连接处理程序并通过调用mysql_real_connect()连接到服务器。 3. 发出SQL语句并处理其结果。在下面的讨论中详细介绍了使用它的方法。 4. 通过调用mysql_close()关闭与MySQL服务器的连接。 5. 通过调用mysql_library_end()结束MySQL库的使用。 调用mysql_library_init()和mysql_library_end()的目的在于为MySQL库提供恰当的初始化和结束处理。对于与客户端库链接的应用程序它们提供了改进的内存管理功能。如果不调用mysql_library_end()内存块仍将保持分配状态这不会增加应用程序使用的内存量但某些内存泄漏检测器将抗议它。对于与嵌入式服务器链接的应用程序这些调用会启动并停止服务器。 mysql_library_init()和mysql_library_end()实际上是#define符号这类符号使得它们等效于mysql_server_init()和mysql_server_end()但其名称更清楚地指明无论应用程序使用的是mysqlclient或mysqld库启动或结束MySQL库时应调用它们。对于早期的MySQL版本可调用mysql_server_init()和mysql_server_end()取而代之。 如果愿意可省略对mysql_library_init()的调用这是因为必要时mysql_init()会自动调用它。 要想连接到服务器可调用mysql_init()来初始化连接处理程序然后用该处理程序以及其他信息如主机名、用户名和密码调用mysql_real_connect()。建立连接后在低于5.0.3版的API中mysql_real_connect()会将再连接标志MYSQL结构的一部分设置为1或在较新的版本中将其设置为0。对于该标志值“1”指明如果因连接丢失而无法执行语句放弃之前会尝试再次连接到服务器。从MySQL 5.0.13开始可以在mysql_options()上使用MYSQL_OPT_RECONNECT选项以控制再连接行为。完成连接后调用mysql_close()中止它。 当连接处于活动状态时客户端或许会使用mysql_query()或mysql_real_query()向服务器发出SQL查询。两者的差别在于mysql_query()预期的查询为指定的、由Null终结的字符串而myql_real_query()预期的是计数字符串。如果字符串包含二进制数据其中可能包含Null字节就必须使用mysql_real_squery()。 对于每个非SELECT查询例如INSERT、UPDATE、DELETE通过调用mysql_affected_rows()可发现有多少行已被改变影响。 对于SELECT查询能够检索作为结果集的行。注意某些语句因其返回行类似与SELECT。包括SHOW、DESCRIBE和EXPLAIN。应按照对待SELECT语句的方式处理它们。 客户端处理结果集的方式有两种。一种方式是通过调用mysql_store_result()一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行并将它们保存在客户端。第二种方式是针对客户端的通过调用mysql_use_result()对“按行”结果集检索进行初始化处理。该函数能初始化检索结果但不能从服务器获得任何实际行。 在这两种情况下均能通过调用mysql_fetch_row()访问行。通过mysql_store_result()mysql_fetch_row()能够访问以前从服务器获得的行。通过mysql_use_result()mysql_fetch_row()能够实际地检索来自服务器的行。通过调用mysql_fetch_lengths()能获得关于各行中数据大小的信息。 完成结果集操作后请调用mysql_free_result()释放结果集使用的内存。 这两种检索机制是互补的。客户端程序应选择最能满足其要求的方法。实际上客户端最常使用的是mysql_store_result()。 mysql_store_result()的1个优点在于由于将行全部提取到了客户端上你不仅能连续访问行还能使用mysql_data_seek()或mysql_row_seek()在结果集中向前或向后移动以更改结果集内当前行的位置。通过调用mysql_num_rows()还能发现有多少行。另一方面对于大的结果集mysql_store_result()所需的内存可能会很大你很可能遇到内存溢出状况。 mysql_use_result()的1个优点在于客户端所需的用于结果集的内存较少原因在于一次它仅维护一行由于分配开销较低mysql_use_result()能更快。它的缺点在于你必须快速处理每一行以避免妨碍服务器你不能随机访问结果集中的行只能连续访问行你不知道结果集中有多少行直至全部检索了它们为止。不仅如此即使在检索过程中你判定已找到所寻找的信息也必须检索所有的行。 通过API客户端能够恰当地对查询作出响应仅在必要时检索行而无需知道查询是否是SELECT查询。可以在每次mysql_query()或mysql_real_query()后通过调用mysql_store_result()完成该操作。如果结果集调用成功查询为SELECT而且能够读取行。如果结果集调用失败可调用mysql_field_count()来判断结果是否的确是所预期的。如果mysql_field_count()返回0查询不返回数据表明它是INSERT、UPDATE、DELETE等而且不返回行。如果mysql_field_count()是非0值查询应返回行但没有返回行。这表明查询是失败了的SELECT。关于如何实现该操作的示例请参见关于mysql_field_count()的介绍。 无论是mysql_store_result()还是mysql_use_result()均允许你获取关于构成结果集的字段的信息字段数目它们的名称和类型等。通过重复调用mysql_fetch_field()可以按顺序访问行内的字段信息或者通过调用mysql_fetch_field_direct()能够在行内按字段编号访问字段信息。通过调用mysql_field_seek()可以改变当前字段的光标位置。对字段光标的设置将影响后续的mysql_fetch_field()调用。此外你也能通过调用mysql_fetch_fields()一次性地获得关于字段的所有信息。 为了检测和通报错误MySQL提供了使用mysql_errno()和mysql_error()函数访问错误信息的机制。它们能返回关于最近调用的函数的错误代码或错误消息最近调用的函数可能成功也可能失败这样你就能判断错误是在何时出现的以及错误是什么。 1.连接mysql数据库示例 #include #include int main(int argc, const char *argv[]) {MYSQL mysql;if (NULL mysql_init(mysql)) { //分配和初始化MYSQL对象printf(mysql_init(): %s\n, mysql_error(mysql));return -1;}//尝试与运行在主机上的MySQL数据库引擎建立连接if (NULL mysql_real_connect(mysql,localhost,root,shallnet,db_users,0,NULL,0)) {printf(mysql_real_connect(): %s\n, mysql_error(mysql));return -1;}printf(Connected MySQL successful! \n);mysql_close(mysql);return 0; } 上例中使用函数说明 MYSQL *mysql_init(MYSQL *mysql) 分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针该函数将分配、初始化、并返回新对象。否则将初始化对象并返回对象的地址。如果mysql_init()分配了新的对象当调用mysql_close()来关闭连接时。将释放该对象。函数返回初始化的MYSQL*句柄。如果无足够内存以分配新的对象返回NULL。 MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag) mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前mysql_real_connect()必须成功完成。 第一个参数mysql应是已有MYSQL结构的地址。 “host”的值必须是主机名或IP地址。如果“host”是NULL或字符串localhost连接将被视为与本地主机的连接。 “passwd”参数包含用户的密码。如果“passwd”是NULL仅会对该用户的拥有1个空密码字段的用户表中的条目进行匹配检查。这样数据库管理员就能按特定的方式设置MySQL权限系统根据用户是否拥有指定的密码用户将获得不同的权限。 “db”是数据库名称。如果db为NULL连接会将默认的数据库设为该值。 如果“port”不是0其值将用作TCP/IP连接的端口号。注意“host”参数决定了连接的类型。 如果unix_socket不是NULL该字符串描述了应使用的套接字或命名管道。注意“host”参数决定了连接的类型。 client_flag的值通常为0但是也能将其设置为下述标志的组合以允许特定功能 标志名称 标志描述 CLIENT_COMPRESS 使用压缩协议。 CLIENT_FOUND_ROWS 返回发现的行数匹配的而不是受影响的行数。 CLIENT_IGNORE_SPACE 允许在函数名后使用空格。使所有的函数名成为保留字。 CLIENT_INTERACTIVE 关闭连接之前允许interactive_timeout取代了wait_timeout秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。 CLIENT_LOCAL_FILES 允许LOAD DATA LOCAL处理功能。 CLIENT_MULTI_STATEMENTS 通知服务器客户端可能在单个字符串内发送多条语句由‘;’隔开。如果未设置该标志将禁止多语句执行。 CLIENT_MULTI_RESULTS 通知服务器客户端能够处理来自多语句执行或存储程序的多个结果集。如果设置了CLIENT_MULTI_STATEMENTS将自动设置它。 CLIENT_NO_SCHEMA 禁止db_name.tbl_name.col_name语法。它用于ODBC。如果使用了该语法它会使分析程序生成错误在捕获某些ODBC程序中的缺陷时它很有用。 CLIENT_ODBC 客户端是ODBC客户端。它将mysqld变得更为ODBC友好。 CLIENT_SSL 使用SSL加密协议。该选项不应由应用程序设置它是在客户端库内部设置的。 显示详细信息 如果连接成功函数返回MYSQL*连接句柄。如果连接失败返回NULL。对于成功的连接返回值与第1个参数的值相同。 const char *mysql_error(MYSQL *mysql) 对于由mysql指定的连接对于失败的最近调用的API函数mysql_error()返回包含错误消息的、由Null终结的字符串。如果该函数未失败mysql_error()的返回值可能是以前的错误或指明无错误的空字符串。 经验规则是如果成功所有向服务器请求信息的函数均会复位mysql_error()。 下面为编译和执行结果输出 # make cc -Wall -Werror -O2 -I/usr/include/mysql/ -c -o main.o main.c Linking target_bin... # ./target_bin Connected MySQL successful! 如果故意改错密码编译链接之后程序输出如下信息 # ./target_bin mysql_real_connect(): Access denied for user rootlocalhost (using password: YES)2.查询数据库示例 #include #include #include int main(int argc, const char *argv[]) {MYSQL mysql;MYSQL_RES *res NULL;MYSQL_ROW row;char *query_str NULL;int rc, i, fields;int rows;if (NULL mysql_init(mysql)) {printf(mysql_init(): %s\n, mysql_error(mysql));return -1;}if (NULL mysql_real_connect(mysql,localhost,root,shallnet,db_users,0,NULL,0)) {printf(mysql_real_connect(): %s\n, mysql_error(mysql));return -1;}printf(1. Connected MySQL successful! \n);query_str select * from tb_users;rc mysql_real_query(mysql, query_str, strlen(query_str));if (0 ! rc) {printf(mysql_real_query(): %s\n, mysql_error(mysql));return -1;}res mysql_store_result(mysql);if (NULL res) {printf(mysql_restore_result(): %s\n, mysql_error(mysql));return -1;}rows mysql_num_rows(res);printf(The total rows is: %d\n, rows);fields mysql_num_fields(res);printf(The total fields is: %d\n, fields);while ((row mysql_fetch_row(res))) {for (i 0; i fields; i) {printf(%s\t, row[i]);}printf(\n);}mysql_close(mysql);return 0; } int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length) 执行由“query”指向的SQL查询它应是字符串长度字节“long”。正常情况下字符串必须包含1条SQL语句而且不应为语句添加终结分号‘;’或“\g”。如果允许多语句执行字符串可包含由分号隔开的多条语句。 对于包含二进制数据的查询必须使用mysql_real_query()而不是mysql_query()这是因为二进制数据可能会包含‘\0’字符。此外mysql_real_query()比mysql_query()快这是因为它不会在查询字符串上调用strlen()。如果查询成功函数返回0。如果出现错误函数返回非0值。 MYSQL_RES *mysql_store_result(MYSQL *mysql) 对于成功检索了数据的每个查询SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等必须调用mysql_store_result()或mysql_use_result()。 对于其他查询不需要调用mysql_store_result()或mysql_use_result()但是如果在任何情况下均调用了mysql_store_result()它也不会导致任何伤害或性能降低。通过检查mysql_store_result()是否返回0可检测查询是否没有结果集以后会更多。 如果希望了解查询是否应返回结果集可使用mysql_field_count()进行检查。mysql_store_result()将查询的全部结果读取到客户端分配1个MYSQL_RES结构并将结果置于该结构中。如果查询未返回结果集mysql_store_result()将返回Null指针例如如果查询是INSERT语句。 如果读取结果集失败mysql_store_result()还会返回Null指针。通过检查mysql_error()是否返回非空字符串mysql_errno()是否返回非0值或mysql_field_count()是否返回0可以检查是否出现了错误。如果未返回行将返回空的结果集。空结果集设置不同于作为返回值的空指针。 一旦调用了mysql_store_result()并获得了不是Null指针的结果可调用mysql_num_rows()来找出结果集中的行数。 可以调用mysql_fetch_row()来获取结果集中的行或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。 一旦完成了对结果集的操作必须调用mysql_free_result()。 返回具有多个结果的MYSQL_RES结果集合。如果出现错误返回NULL。 my_ulonglong mysql_num_rows(MYSQL_RES *result) 函数返回结果集中的行数mysql_num_rows()的使用取决于是否采用了mysql_store_result()或mysql_use_result()来返回结果集。如果使用了mysql_store_result()可以立刻调用mysql_num_rows()。如果使用了mysql_use_result()mysql_num_rows()不返回正确的值直至检索了结果集中的所有行为止函数结果集中的行数。 unsigned int mysql_num_fields(MYSQL_RES *result) 要想传递MYSQL*参量取而代之请使用无符号整数mysql_field_count(MYSQL *mysql)。 函数返回结果集中的列数。注意你可以从指向结果集的指针或指向连接句柄的指针获得行数。如果mysql_store_result()或mysql_use_result()返回NULL应使用连接句柄因而没有结果集指针。在该情况下可调用mysql_field_count()来判断mysql_store_result()是否生成了非空结果。这样客户端程序就能采取恰当的行动而不需要知道查询是否是SELECT语句或类似SELECT的语句。 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) 检索结果集的下一行。在mysql_store_result()之后使用时如果没有要检索的行mysql_fetch_row()返回NULL。在mysql_use_result()之后使用时如果没有要检索的行或出现了错误mysql_fetch_row()返回NULL。 行内值的数目由mysql_num_fields(result)给出。如果行中保存了调用mysql_fetch_row()返回的值将按照row[0]到row[mysql_num_fields(result)-1]访问这些值的指针。行中的NULL值由NULL指针指明。 可以通过调用mysql_fetch_lengths()来获得行中字段值的长度。对于空字段以及包含NULL的字段长度为0。通过检查字段值的指针能够区分它们。如果指针为NULL字段为NULL否则字段为空。 函数返回下一行的MYSQL_ROW结构。如果没有更多要检索的行或出现了错误返回NULL。 void mysql_free_result(MYSQL_RES *result) 该函数释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后必须调用mysql_free_result()释放结果集使用的内存。 释放完成后不要尝试访问结果集。 编译链接执行结果如下 # make cc -Wall -Werror -O2 -I/usr/include/mysql/ -c -o main.o main.c Linking target_bin... # ./target_bin 1. Connected MySQL successful! The total rows is: 13 The total fields is: 3 10000 Allen 1981-01-01 10001 Ben 1982-04-02 10002 Curry 1985-08-12 10003 Davis 1978-07-12 10004 Ellis 1979-09-02 10005 Faried 1984-02-05 10007 Hamilton 1988-07-07 10008 Johnson 1986-06-07 10009 Jackson 1989-08-17 10010 James 1984-12-30 10011 Gay 1987-02-03 10012 Kaman 1981-04-04 10006 Wade 1982-03-04 插入删除示例 #include #include #include int main(int argc, const char *argv[]) {MYSQL mysql;MYSQL_RES *res NULL;MYSQL_ROW row;char *query_str NULL;int rc, i, fields;int rows;if (NULL mysql_init(mysql)) {printf(mysql_init(): %s\n, mysql_error(mysql));return -1;}if (NULL mysql_real_connect(mysql,localhost,root,shallnet,db_users,0,NULL,0)) {printf(mysql_real_connect(): %s\n, mysql_error(mysql));return -1;}printf(1. Connected MySQL successful! \n); //执行插入请求query_str insert into tb_users values (12345, justtest, 2015-5-5);rc mysql_real_query(mysql, query_str, strlen(query_str));if (0 ! rc) {printf(mysql_real_query(): %s\n, mysql_error(mysql));return -1;} //执行删除请求query_str delete from tb_users where userid10006;rc mysql_real_query(mysql, query_str, strlen(query_str));if (0 ! rc) {printf(mysql_real_query(): %s\n, mysql_error(mysql));return -1;} //然后查询插入删除之后的数据query_str select * from tb_users;rc mysql_real_query(mysql, query_str, strlen(query_str));if (0 ! rc) {printf(mysql_real_query(): %s\n, mysql_error(mysql));return -1;}res mysql_store_result(mysql);if (NULL res) {printf(mysql_restore_result(): %s\n, mysql_error(mysql));return -1;}rows mysql_num_rows(res);printf(The total rows is: %d\n, rows);fields mysql_num_fields(res);printf(The total fields is: %d\n, fields);while ((row mysql_fetch_row(res))) {for (i 0; i fields; i) {printf(%s\t, row[i]);}printf(\n);}mysql_free_result(res);mysql_close(mysql);return 0; }编译链接执行结果如下 # make cc -Wall -Werror -O2 -I/usr/include/mysql/ -c -o main.o main.c Linking target_bin... # ./target_bin 1. Connected MySQL successful! The total rows is: 13 The total fields is: 3 10000 Allen 1981-01-01 10001 Ben 1982-04-02 10002 Curry 1985-08-12 10003 Davis 1978-07-12 10004 Ellis 1979-09-02 10005 Faried 1984-02-05 10007 Hamilton 1988-07-07 10008 Johnson 1986-06-07 10009 Jackson 1989-08-17 10010 James 1984-12-30 10011 Gay 1987-02-03 10012 Kaman 1981-04-04 12345 justtest 2015-05-05 搞定linux上MySQL编程六C语言编写MySQL程序结 - mysql数据库栏目 - 红黑联盟 (2cto.com)
http://www.tj-hxxt.cn/news/225616.html

相关文章:

  • 网站推广文章怎么写合肥市城乡和建设网站
  • 做外贸网站注意事项北京网站开发周期
  • 绵阳市 网站建设用dw做的网站能用吗
  • python 做网站很快吗水资源监控能力建设 网站
  • 网站建设费用分类ppt模板大全软件下载
  • 国外校园网站网站建设发展历程制作一个静态网站的步骤
  • 山东定制型网站建设推广如何做网站的外部链接
  • 为什么做的网站要续费html做网站经验技巧
  • 摄影网站模板下载欧米茄官方手表
  • 商务网站推广技巧包括什么今天山东一例发生在哪里
  • 东莞市建设网站培训一网一平台是什么
  • 牙科医院网站建设天津建设网站安全员考试查询
  • 衡水网站seowordpress 拖拽排序插件
  • 珠江现代建设 杂志社网站小程序短链接生成网址
  • 专业服务好的网站设计制作成都家装公司
  • 免费站长统计工具宝山手机网站制作公司
  • 适合个人站长的网站有哪些互联网推广项目
  • 班级网站建设开题报告成都市住房和城乡建设厅官网
  • 南昌做网站哪个公司好北京有限公司有哪些
  • 网站代备建站快车源码
  • 网站评论怎么做的常州妇幼做的无创 在哪个网站查
  • 网站图片尺寸织梦网站程序安装
  • 如何在手机上做网站wordpress 小说 主题
  • 北京市建设监理协会网站谷歌商店下载官方正版
  • 安徽省建设厅网站工程师查询软件开发外包是什么意思
  • 浙江省建设注册管理中心网站首页淄博网站排名优化公司
  • 大理石在哪些网站做宣传阿里云网站域名查询
  • 下载ppt模板幻灯片模板关键词排名优化外包
  • 萍乡网站优化seo联盟平台
  • 高端定制网站建设高端旅游定制wordpress创业模式