MySQL C API概述
以下列表总结了C API中可用的功能。有关更多详细信息,请参见 第27.8.7节“C API函数描述”中的说明。
my_init()
:在线程安全程序中初始化全局变量和线程处理程序mysql_affected_rows()
:返回改变的行数/删除/插入的最后UPDATE
,DELETE
或INSERT
查询mysql_autocommit()
:打开/关闭自动提交模式mysql_change_user()
:在打开的连接上更改用户和数据库mysql_character_set_name()
:返回当前连接的默认字符集名称mysql_client_find_plugin()
:返回指向插件的指针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_count()
:返回最近语句的结果列数mysql_field_seek()
:将列光标放在指定的列上mysql_field_tell()
:返回用于最后一个的字段光标的位置mysql_fetch_field()
mysql_free_result()
:释放结果集使用的内存mysql_get_character_set_info()
:返回有关默认字符集的信息mysql_get_client_info()
:将客户端版本信息作为字符串返回mysql_get_client_version()
:以整数形式返回客户端版本信息mysql_get_host_info()
:返回描述连接的字符串mysql_get_option()
:返回mysql_options()
选项 的值mysql_get_proto_info()
:返回连接使用的协议版本mysql_get_server_info()
:返回服务器版本号mysql_get_server_version()
:以整数形式返回服务器的版本号mysql_get_ssl_cipher()
:返回当前的SSL密码mysql_hex_string()
:以十六进制格式编码字符串mysql_info()
:返回有关最近执行的查询的信息mysql_init()
获取或初始化MYSQL
结构mysql_insert_id()
:返回AUTO_INCREMENT
上一个查询为列 生成的IDmysql_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_load_plugin()
:加载一个插件mysql_load_plugin_v()
:加载一个插件mysql_more_results()
:检查是否存在更多结果mysql_next_result()
:返回/启动多重结果执行中的下一个结果mysql_num_fields()
:返回结果集中的列数mysql_num_rows()
:返回结果集中的行数mysql_options()
:为连接选项设置mysql_real_connect()
mysql_options4()
:为连接选项设置mysql_real_connect()
mysql_ping()
:检查到服务器的连接是否正常工作,必要时重新连接mysql_plugin_options()
:设置一个插件选项mysql_query()
:执行指定为空终止字符串的SQL查询mysql_real_connect()
:连接到MySQL服务器mysql_real_escape_string()
:考虑到连接的当前字符集,转义字符串中的特殊字符以用于SQL语句mysql_real_escape_string_quote()
:转义字符串中的特殊字符以便在SQL语句中使用,同时考虑连接的当前字符集和引用上下文mysql_real_query()
:执行指定为计数字符串的SQL查询mysql_refresh()
:刷新或重置表格和缓存mysql_reload()
:通知服务器重新加载授权表mysql_reset_connection()
:重置连接以清除会话状态mysql_rollback()
:回退交易mysql_row_seek()
:使用返回的值寻找结果集中的行偏移量mysql_row_tell()
mysql_row_tell()
:返回行光标位置mysql_select_db()
:选择一个数据库mysql_server_end()
:完成MySQL C API库mysql_server_init()
:初始化MySQL C API库mysql_session_track_get_first()
:获取会话状态更改信息的第一部分mysql_session_track_get_next()
:获取会话状态更改信息的下一部分mysql_set_character_set()
:为当前连接设置默认字符集mysql_set_local_infile_default()
:将LOAD DATA LOCAL INFILE
处理程序回调设置为其默认值mysql_set_local_infile_handler()
:安装特定于应用程序的LOAD DATA LOCAL INFILE
处理程序回调mysql_set_server_option()
:为连接设置一个选项(如multi-statements
)mysql_sqlstate()
:返回最后一个错误的SQLSTATE错误代码mysql_shutdown()
:关闭数据库服务器mysql_ssl_set()
:准备建立到服务器的SSL连接mysql_stat()
:以字符串形式返回服务器状态mysql_store_result()
:检索完整的结果集给客户端mysql_thread_end()
:完成线程处理程序mysql_thread_id()
:返回当前的线程IDmysql_thread_init()
:初始化线程处理程序mysql_thread_safe()
:如果客户端编译为线程安全,则返回1mysql_use_result()
:启动逐行结果集检索mysql_warning_count()
:返回以前的SQL语句的警告计数
应用程序应该使用这个总体大纲来与MySQL进行交互:
通过调用初始化MySQL客户端库
mysql_library_init()
。该功能既存在于libmysqlclient
C客户端库中,也存在于libmysqld
嵌入式服务器库中,因此无论您是通过与-libmysqlclient
标志链接来构建常规客户端程序,还是通过与标志链接来构建 嵌入式服务器应用程序,都可以使用该功能-libmysqld
。通过调用初始化连接处理程序并通过调用
mysql_init()
连接到服务器mysql_real_connect()
。发出SQL语句并处理它们的结果。(以下讨论提供了有关如何执行此操作的更多信息。)
通过调用关闭与MySQL服务器的连接
mysql_close()
。通过调用最终使用MySQL客户端库
mysql_library_end()
。
打电话的目的 mysql_library_init()
,并 mysql_library_end()
为提供MySQL客户端库提供恰当的初始化和结束。对于与客户端库链接的应用程序,它们提供改进的内存管理。如果你没有调用mysql_library_end()
,则会 分配一块内存。(这不会增加应用程序使用的内存量,但有些内存泄漏检测器会对此抱怨。)对于与嵌入式服务器链接的应用程序,这些调用会启动和停止服务器。
在非多线程环境中,调用 mysql_library_init()
可能会被忽略,因为mysql_init()
它会根据需要自动调用它。但是, mysql_library_init()
在多线程环境中不是线程安全的,因此也不是 mysql_init()
,哪个调用 mysql_library_init()
。您必须mysql_library_init()
在产生任何线程之前进行调用,或者使用互斥锁来保护调用,无论是mysql_library_init()
通过调用还是间接调用 mysql_init()
。这应该在任何其他客户端库调用之前完成。
要连接到服务器,请调用 mysql_init()
初始化连接处理程序,然后mysql_real_connect()
使用该处理程序(以及其他信息,例如主机名,用户名和密码)进行调用 。连接后, mysql_real_connect()
将 reconnect
标志(MYSQL
结构的一部分 )设置为 1
API 5.0.3以前0
版本或 新版本中的值。1
此标志的值 表示如果由于连接丢失而无法执行语句,则在放弃之前尝试重新连接到服务器。您可以使用该 MYSQL_OPT_RECONNECT
选项 mysql_options()
来控制重新连接行为。完成连接后,请致电 mysql_close()
终止它。
当连接处于活动状态时,客户端可以使用mysql_query()
或将SQL语句发送到服务器mysql_real_query()
。两者之间的区别在于 mysql_query()
期望查询被指定为以空字符结尾的字符串,而 mysql_real_query()
期望计数的字符串。如果字符串包含二进制数据(可能包含空字节),则必须使用mysql_real_query()
。
对于每个非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()
在于,因为所有行都被提取到客户端,所以您不仅可以按顺序访问行,还可以使用结果集中的来回移动mysql_data_seek()
或mysql_row_seek()
更改结果集中当前行的位置。你也可以通过调用找出有多少行 mysql_num_rows()
。另一方面,mysql_store_result()
对于大型结果集,内存需求 可能非常高,并且您更可能遇到内存不足的情况。
其优点mysql_use_result()
是客户端对结果集的内存要求较少,因为它一次只维护一行(因为分配开销较少, mysql_use_result()
速度可能更快)。缺点是您必须快速处理每一行以避免捆绑服务器,您不能随机访问结果集中的行(您只能按顺序访问行),并且结果集中的行数是未知的,直到您已全部检索到它们。此外, 即使您在检索过程中确定找到了您要查找的信息,也必须检索所有行。
API使得客户端可以对语句作出适当的响应(仅在必要时检索行),而无需知道语句是否为SELECT
。你可以mysql_store_result()
在每个mysql_query()
(或 mysql_real_query()
)之后通过调用来 完成 。如果结果集调用成功,则语句为a SELECT
,您可以读取行。如果结果集调用失败,请调用 mysql_field_count()
以确定结果是否实际上是预期的。如果 mysql_field_count()
返回零,声明没有返回数据(表明它是一个 INSERT
,UPDATE
, DELETE
,等等),并没有返回行。如果 mysql_field_count()
该语句应该返回行,但不是。这表明该声明是 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()
函数提供对错误信息的访问 。这些将返回最近调用的函数的错误代码或错误消息,这些函数可以成功或失败,从而使您能够确定错误何时发生以及发生了什么。
MySQL C API概述的更多相关文章
- MySQL逻辑架构概述
1.MySQL逻辑架构 MySQL逻辑架构图 MySQL逻辑架构分四层 1.连接层:主要完成一些类似连接处理,授权认证及相关的安全方案. 2.服务层:在 MySQL据库系统处理底层数据之前的所有工作都 ...
- MySql接口API函数综述
C API函数概述 函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换 a ...
- PHP数据库操作:从MySQL原生API到PDO
本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的. 为了后面的测试,先建立数据库表test.包含表名user,s ...
- c++使用mysql的api连接相关问题
记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...
- mysql C API 字符串玩转备份调优
- The MySQL C API 编程实例
在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- MySQL缓存命中率概述及如何提高缓存命中率
MySQL缓存命中率概述 工作原理: 查询缓存的工作原理,基本上可以概括为: 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句: 新的SELECT语句或预处理查询语句 ...
- API概述,使用步骤和Scanner概述及其API文档的使用
API概述 API(Application Programming Interface),应用程序编程接口.Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档.这些类将底 ...
随机推荐
- 【BZOJ5211】[ZJOI2018]线图(树哈希,动态规划)
[BZOJ5211][ZJOI2018]线图(树哈希,动态规划) 题面 BZOJ 洛谷 题解 吉老师的题目是真的神仙啊. 去年去现场这题似乎骗了\(20\)分就滚粗了? 首先\(k=2\)直接算\(k ...
- 编译安装Nginx和PHP(带编译mysql)
应用场景:目前常见的LNMP架构中很多服务都采用nginx+fastcgi+php来提供服务. 测试环境:Centos 7.2 / Nginx 1.12.0 / PHP 5.6 配置步骤: 1. 下载 ...
- redis执行lua文件
1.编写lua文件 还lua表示循环插入1-100的键为1-100值为1-100的键值对到redis中 for i=0,100 do redis.call("set",i,i) e ...
- bzoj4198 荷马史诗
关于Huffman树: 大概就是那样子吧. 是这样的:对于最多只能有k个叉的树,我们想要使得∑val(i) * deep(i)最大 那么我们补0后建立小根堆即可. 最典型例题:合并果子. 然后是这个: ...
- 快速傅里叶变换(FFT)
扯 去北京学习的时候才系统的学习了一下卷积,当时整理了这个笔记的大部分.后来就一直放着忘了写完.直到今天都腊月二十八了,才想起来还有个FFT的笔记没整完呢.整理完这个我就假装今年的任务全都over了吧 ...
- 网上找的Backbone.js
// Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...
- struts2 防止表单的重复提交
防止表单重复提交(拦截器) 1.回顾之前的解决办法: 2.Struts2中的解决办法: 2.1.使用重定向 <result type="redirect">/succe ...
- C++基础知识--DAY1
1. C语言是面向过程的语言,C++是面向对象的语言,相对于C语言来说,C++语法规则更为严格,其存在类型增强的问题. 类型增强,顾名思义就是C++相对于C语言来说有更加严格的类型检查,很多C语言的语 ...
- cookie猜数字游戏(下)------------以及cookie使用的不安全之处
1.通过cookie可以解决上篇中多个用户对数据的修改,每个COOKIE保存不同用户的数据 <?php if(empty($_COOKIE['num'])||empty($_GET['num'] ...
- python: 基本知识(二)
1.set() set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. x = set('hello’) y = set('world') x ---- ...