# mysql.client 库模块帮助文档

## mysql 成员列表 <a id="mysql" href="#mysql">&#x23;</a>

### mysql.client() <a id="mysql.client" href="#mysql.client">&#x23;</a>
[返回对象:mysqlClientObject](#mysqlClientObject)

### mysql.client(连接参数表） <a id="mysql.client" href="#mysql.client">&#x23;</a>

```aardio
mysql.client(  
	server = "localhost";  
	database = "数据库名";  
	uid = "用户名";  
	pwd = "密码";/*如果指定连接参数表则自动调用对象的 open 方法打开数据库。  
连接参数表支持的字段：  
- server: 主机 IP 或域名，可在冒号后添加端口号， 可选参数，默认值为 "localhost"  
- port: 连接端口， 可选参数，默认为 3306  
- uid: 连接用户名， 可选参数，默认值为 "root"  
- pwd: 连接密码， 可选参数。  
- database: 数据库名， 可选参数。  
- flags: 连接选项，数值，默认值为 0。  
- connectTimeout: 连接超时，以秒为单位，可选参数。  
- ssl: SSL 连接参数表，可选，支持的字段与 sslSet 函数相同。*/  
);
```

## mysql.client 成员列表 <a id="mysql.client" href="#mysql.client">&#x23;</a>

MySQL 客户端

### mysql.client.pluginDir <a id="mysql.client.pluginDir" href="#mysql.client.pluginDir">&#x23;</a>
默认插件目录，  
默认值为 "%LocalAppData%\aardio\mariadb\plugin\客户端主版本号.次版本号"。  
连接时如果连接参数中用 pluginDir 字段指定了插件目录，  
则忽略 mysql.client.pluginDir

### mysql.client.version() <a id="mysql.client.version" href="#mysql.client.version">&#x23;</a>
客户端版本。  
返回 XYYZZ 格式的数值：  
X为主版本号，YY为副版本号，ZZ 为修订版本号。  
如果参数 @1 为 true，则返回字符串格式版本号 "X.Y.Z"

## mysqlClientObject 成员列表 <a id="mysqlClientObject" href="#mysqlClientObject">&#x23;</a>

### mysqlClientObject.beginTrans() <a id="mysqlClientObject.beginTrans" href="#mysqlClientObject.beginTrans">&#x23;</a>
开始事务

### mysqlClientObject.changeUser("用户名","密码","数据库名") <a id="mysqlClientObject.changeUser" href="#mysqlClientObject.changeUser">&#x23;</a>
修改登录用户

### mysqlClientObject.characterSetName() <a id="mysqlClientObject.characterSetName" href="#mysqlClientObject.characterSetName">&#x23;</a>
当前连接的默认字符集

### mysqlClientObject.charset <a id="mysqlClientObject.charset" href="#mysqlClientObject.charset">&#x23;</a>
连接的默认字符集，默认为UTF8,  
不建议更改此值

### mysqlClientObject.clearResult() <a id="mysqlClientObject.clearResult" href="#mysqlClientObject.clearResult">&#x23;</a>
清空查询返回值  
如果下次查询报错"Commands out of sync; you can't run this command now"  
则应在查询前调用此函数

### mysqlClientObject.close() <a id="mysqlClientObject.close" href="#mysqlClientObject.close">&#x23;</a>
关闭服务器连接

### mysqlClientObject.commitTrans() <a id="mysqlClientObject.commitTrans" href="#mysqlClientObject.commitTrans">&#x23;</a>
提交事务

### mysqlClientObject.connection <a id="mysqlClientObject.connection" href="#mysqlClientObject.connection">&#x23;</a>
数据库连接句柄  
不要修改该属性

### mysqlClientObject.createDb("数据库名") <a id="mysqlClientObject.createDb" href="#mysqlClientObject.createDb">&#x23;</a>
如果数据库不存在则创建数据库,  
如果成功创建数据库则调用selectDb函数选择数据库  
所有操作成功返回true

### mysqlClientObject.debug(调试信息) <a id="mysqlClientObject.debug" href="#mysqlClientObject.debug">&#x23;</a>
用给定的字符串执行DBUG_PUSH

### mysqlClientObject.dropDb("数据库名") <a id="mysqlClientObject.dropDb" href="#mysqlClientObject.dropDb">&#x23;</a>
如果存在该数据库则删除

### mysqlClientObject.dumpDebugInfo() <a id="mysqlClientObject.dumpDebugInfo" href="#mysqlClientObject.dumpDebugInfo">&#x23;</a>
让服务器将调试信息写入日志

### mysqlClientObject.each() <a id="mysqlClientObject.each" href="#mysqlClientObject.each">&#x23;</a>

```aardio
for 字段名,,/*注意首字段必须为非空值*/字段名2 in mysqlClientObject.each("SELECT * FROM 'MYTABLE'"){  

}
```

### mysqlClientObject.errno <a id="mysqlClientObject.errno" href="#mysqlClientObject.errno">&#x23;</a>
返回错误代码

### mysqlClientObject.escape() <a id="mysqlClientObject.escape" href="#mysqlClientObject.escape">&#x23;</a>
转义参数指定值为用于 MySQL 查询语句的参数化值

### mysqlClientObject.escapeId() <a id="mysqlClientObject.escapeId" href="#mysqlClientObject.escapeId">&#x23;</a>
如果传入参数是文本则转换为 SQL 标识符,  
返回文本首尾会添加反引号,  

如果传入参数是表, 则格式化为 SQL 键值对并以 AND 为分隔符,  
如果表中的值为数组,则格式化为 IN 语句

### mysqlClientObject.escapeString() <a id="mysqlClientObject.escapeString" href="#mysqlClientObject.escapeString">&#x23;</a>
转义参数指定值为用于 MySQL 查询语句参数化字符串  
返回文本不会在首尾添加单引号

将字符串编码为合法的转义SQL字符串,  
格式化命名参数时,字符串会自动调用该函数转义为安全的字符串

### mysqlClientObject.format(SQL语句,格式化参数...) <a id="mysqlClientObject.format" href="#mysqlClientObject.format">&#x23;</a>
格式化 SQL 查询语句。  
所有需要格式化 SQL 语句的函数调用此函数格式化 SQL语句,  
如果格式化参数不是表则调用 string.format 格式化,否则按以下规则格式化:  

SQL语句中?或??占位符使用表的数组元素格式化,  
@字符开始的命名参数使用表的名值对元素格式化,  
其中??格式化为标识符,其他占位符格式化为参数值。  

字符串转为SQL安全转义字符串,buffer转为X'4D7953514C'格式,  
数组则自动展开为列表,例如{'a', 'b'}格式化为'a', 'b'  
嵌套数组则格式化为分组列表,例如{{'a', 'b'}, {'c', 'd'}} 格式化为 ('a', 'b'), ('c', 'd')  
非数组的命名表，则格式化为 SQL 键值对,默认以逗号为分隔符,  
??占位符格式化 SQL 键值对则以 AND 为分隔符,并将数组值转换为IN语句

### mysqlClientObject.getAffectedRows() <a id="mysqlClientObject.getAffectedRows" href="#mysqlClientObject.getAffectedRows">&#x23;</a>
sql语句执行后影响的记录行数

### mysqlClientObject.getInfo() <a id="mysqlClientObject.getInfo" href="#mysqlClientObject.getInfo">&#x23;</a>
返回最近执行查询信息的文本描述

### mysqlClientObject.getProtoInfo() <a id="mysqlClientObject.getProtoInfo" href="#mysqlClientObject.getProtoInfo">&#x23;</a>
返回当前连接所使用的协议版本

### mysqlClientObject.getServerVersion() <a id="mysqlClientObject.getServerVersion" href="#mysqlClientObject.getServerVersion">&#x23;</a>
服务端版本。  
返回 XYYZZ 格式的数值：  
X为主版本号，YY为副版本号，ZZ 为修订版本号。  
如果参数 @1 为 true，则返回字符串格式版本号 "X.Y.Z"

### mysqlClientObject.getSqlstate() <a id="mysqlClientObject.getSqlstate" href="#mysqlClientObject.getSqlstate">&#x23;</a>
返回关于上一个错误的SQLSTATE错误代码

### mysqlClientObject.getTable("SELECT * FROM `表名`",格式化参数) <a id="mysqlClientObject.getTable" href="#mysqlClientObject.getTable">&#x23;</a>
执行SQL返回包含行记录组成的table数组对象,  
每行是由列名、值组成的table表对象  
格式化参数规则请参考 format 函数说明,  
格式化参数也可以是一个表参数,用于替换SQL中占位符指定的参数,  
如果参数表不是数组,SQL语句用@前缀标明命名参数,  
如果格式化参数是数组,请使用?或??占位符

### mysqlClientObject.getThreadId() <a id="mysqlClientObject.getThreadId" href="#mysqlClientObject.getThreadId">&#x23;</a>
返回连接的线程ID，可传入kill函数以杀死线程

### mysqlClientObject.kill() <a id="mysqlClientObject.kill" href="#mysqlClientObject.kill">&#x23;</a>
杀死线程,参数指定线程ID

### mysqlClientObject.lastInsertId() <a id="mysqlClientObject.lastInsertId" href="#mysqlClientObject.lastInsertId">&#x23;</a>
最后插入记录的ID

### mysqlClientObject.lasterr() <a id="mysqlClientObject.lasterr" href="#mysqlClientObject.lasterr">&#x23;</a>
返回错误信息,错误代码

### mysqlClientObject.listDbs("查找数据库名") <a id="mysqlClientObject.listDbs" href="#mysqlClientObject.listDbs">&#x23;</a>
查找数据库并返回记录集  
数据库名允许使用SQL通配符%或下划线  
不指定数据库名则返回所有数据库

### mysqlClientObject.listDbs() <a id="mysqlClientObject.listDbs" href="#mysqlClientObject.listDbs">&#x23;</a>
[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.listFields("表名","查找字段") <a id="mysqlClientObject.listFields" href="#mysqlClientObject.listFields">&#x23;</a>
查找字段并返回记录集  
字段名允许使用SQL通配符%或下划线  
不指定字段名则返回全部字段

### mysqlClientObject.listFields() <a id="mysqlClientObject.listFields" href="#mysqlClientObject.listFields">&#x23;</a>
[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.listProcesses() <a id="mysqlClientObject.listProcesses" href="#mysqlClientObject.listProcesses">&#x23;</a>
返回描述当前服务器线程的结果集  

[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.listTables("查找表名") <a id="mysqlClientObject.listTables" href="#mysqlClientObject.listTables">&#x23;</a>
查找表名并返回记录集  
表名允许使用SQL通配符%或下划线  
不指定表名则返回所有表

### mysqlClientObject.listTables() <a id="mysqlClientObject.listTables" href="#mysqlClientObject.listTables">&#x23;</a>
[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.moreResults() <a id="mysqlClientObject.moreResults" href="#mysqlClientObject.moreResults">&#x23;</a>
是否有其他返回值,  
使用useNextResult或storeNextResult返回下一个返回值

### mysqlClientObject.mysqlDb <a id="mysqlClientObject.mysqlDb" href="#mysqlClientObject.mysqlDb">&#x23;</a>
数据库对象句柄  
不要修改该属性

### mysqlClientObject.nextResult() <a id="mysqlClientObject.nextResult" href="#mysqlClientObject.nextResult">&#x23;</a>
如果还有下一个返回值,返回真

### mysqlClientObject.open(连接参数表） <a id="mysqlClientObject.open" href="#mysqlClientObject.open">&#x23;</a>

```aardio
mysqlClientObject.open(  
	server = ".";  
	database = "数据库名";  
	uid = "用户名";  
	pwd = "密码";  
);
```

### mysqlClientObject.ping() <a id="mysqlClientObject.ping" href="#mysqlClientObject.ping">&#x23;</a>
检查与服务器的连接是否工作，如有必要重新连接

### mysqlClientObject.query <a id="mysqlClientObject.query" href="#mysqlClientObject.query">&#x23;</a>
= 执行SQL并调用 storeResult 函数返回值,  
无返回记录的SQL执行成功返回包含字段 affectedRows（影响记录行数）,insertId（最后插入ID）的表对象,  
如果SQL查询出错返回空值以及错误信息

### mysqlClientObject.query("SELECT * FROM `表名`",格式化参数) <a id="mysqlClientObject.query" href="#mysqlClientObject.query">&#x23;</a>
执行参数 @1 指定的SQL语句,   
可选指定格式化参数,格式化规则请参考 format 函数说明,  
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,  
如果参数表不是数组,SQL语句用@前缀标明命名参数,  
如果格式化参数是数组,请使用?或??占位符

### mysqlClientObject.query() <a id="mysqlClientObject.query" href="#mysqlClientObject.query">&#x23;</a>
[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.refresh() <a id="mysqlClientObject.refresh" href="#mysqlClientObject.refresh">&#x23;</a>
刷新表或高速缓冲或复位复制服务器信息,  
用户必须具有RELOAD权限

### mysqlClientObject.rollbackTrans() <a id="mysqlClientObject.rollbackTrans" href="#mysqlClientObject.rollbackTrans">&#x23;</a>
回滚事务

### mysqlClientObject.selectDb("数据库名") <a id="mysqlClientObject.selectDb" href="#mysqlClientObject.selectDb">&#x23;</a>
设置当前默认数据库,成功返回true,  
类似sql中的 use 数据库名

### mysqlClientObject.setOption(选项,值) <a id="mysqlClientObject.setOption" href="#mysqlClientObject.setOption">&#x23;</a>
可用于设置额外的连接选项，并影响连接的行为,  
值可以是字符串,整数,布尔值或结构体

### mysqlClientObject.shutdown() <a id="mysqlClientObject.shutdown" href="#mysqlClientObject.shutdown">&#x23;</a>
关闭SQL服务器

### mysqlClientObject.sslSet(sslOption) <a id="mysqlClientObject.sslSet" href="#mysqlClientObject.sslSet">&#x23;</a>

```aardio
设置 SSL 连接参数，此函数需要在调用 open 函数打开连接前调用。  
参数 sslOption 应指定一个表对象，可选包含以下字段：  
- key: key 文件路径或 PEM 格式字符串。  
- cert: 证书文件路径或 PEM 格式字符串。  
- ca： CA 根证书文件路径或 PEM 格式字符串。  
- caPath: 包含受信任 CA 证书的目录路径。  
- cipher: 一个或多个以冒号分隔的密码套件名称列。  

也可以在 mysql.client 构造参数表中使用 ssl 字段指定此选项。
```

### mysqlClientObject.stat() <a id="mysqlClientObject.stat" href="#mysqlClientObject.stat">&#x23;</a>
以字符串形式返回服务器状态

### mysqlClientObject.stepQuery("SELECT * FROM `表名`",格式化参数) <a id="mysqlClientObject.stepQuery" href="#mysqlClientObject.stepQuery">&#x23;</a>
用法与query函数类似,  
但直接返回首行数据库并关闭结果集  
格式化参数规则请参考 format 函数说明,  
格式化参数也可以是一个表参数,用于替换SQL中占位符指定的参数,  
如果参数表不是数组,SQL语句用@前缀标明命名参数,  
如果格式化参数是数组,请使用?或??占位符

### mysqlClientObject.storeNextResult() <a id="mysqlClientObject.storeNextResult" href="#mysqlClientObject.storeNextResult">&#x23;</a>
如果有其他返回值,获取下一个返回值  
在客户端缓存记录集  

[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.storeResult() <a id="mysqlClientObject.storeResult" href="#mysqlClientObject.storeResult">&#x23;</a>
获取返回值,在客户端缓存记录集  

[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.useNextResult() <a id="mysqlClientObject.useNextResult" href="#mysqlClientObject.useNextResult">&#x23;</a>
如果有其他返回值,获取下一个返回值  
在SQL服务器上缓存记录集  

[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.useResult() <a id="mysqlClientObject.useResult" href="#mysqlClientObject.useResult">&#x23;</a>
获取返回值,在SQL服务器上缓存记录集  

[返回对象:mysqlRecordsetObject](#mysqlRecordsetObject)

### mysqlClientObject.warningCount <a id="mysqlClientObject.warningCount" href="#mysqlClientObject.warningCount">&#x23;</a>
返回执行前一个SQL语句期间生成的告警数目

## mysqlRecordsetObject 成员列表 <a id="mysqlRecordsetObject" href="#mysqlRecordsetObject">&#x23;</a>

### mysqlRecordsetObject.affectedRows <a id="mysqlRecordsetObject.affectedRows" href="#mysqlRecordsetObject.affectedRows">&#x23;</a>
影响记录行数,  
执行无返回数据的 SQL 此字段才会有值

### mysqlRecordsetObject.dataSeek(行号) <a id="mysqlRecordsetObject.dataSeek" href="#mysqlRecordsetObject.dataSeek">&#x23;</a>
在查询结果集中寻找任意行。偏移值为行号，范围从0到numRows-1

### mysqlRecordsetObject.each() <a id="mysqlRecordsetObject.each" href="#mysqlRecordsetObject.each">&#x23;</a>

```aardio
for 字段名,/*注意首字段必须为非空值*/字段名2 in mysqlRecordsetObject.each(){  

}
```

### mysqlRecordsetObject.eof() <a id="mysqlRecordsetObject.eof" href="#mysqlRecordsetObject.eof">&#x23;</a>
是否已到结果集尾部

### mysqlRecordsetObject.fetchFieldLengths() <a id="mysqlRecordsetObject.fetchFieldLengths" href="#mysqlRecordsetObject.fetchFieldLengths">&#x23;</a>
返回当前行所有数据列的的长度数组  
仅对当前行有效

### mysqlRecordsetObject.fetchFieldTypes() <a id="mysqlRecordsetObject.fetchFieldTypes" href="#mysqlRecordsetObject.fetchFieldTypes">&#x23;</a>
返回所有字段类型描述

### mysqlRecordsetObject.fetchObject() <a id="mysqlRecordsetObject.fetchObject" href="#mysqlRecordsetObject.fetchObject">&#x23;</a>
stepQuery 函数的别名,  
返回下一行记录的以字段名为键的关联数组

### mysqlRecordsetObject.fetchRow() <a id="mysqlRecordsetObject.fetchRow" href="#mysqlRecordsetObject.fetchRow">&#x23;</a>
返回下一行记录列数组

### mysqlRecordsetObject.free() <a id="mysqlRecordsetObject.free" href="#mysqlRecordsetObject.free">&#x23;</a>
释放记录集,  
释放后不能再调用其他使用该记录集的函数

### mysqlRecordsetObject.getColumns() <a id="mysqlRecordsetObject.getColumns" href="#mysqlRecordsetObject.getColumns">&#x23;</a>
返回所有列名数组

### mysqlRecordsetObject.getTable() <a id="mysqlRecordsetObject.getTable" href="#mysqlRecordsetObject.getTable">&#x23;</a>
返回包含行记录组成的table数组对象,  
每行是由列名、值组成的table表对象

### mysqlRecordsetObject.insertId <a id="mysqlRecordsetObject.insertId" href="#mysqlRecordsetObject.insertId">&#x23;</a>
最后插入 ID,  
执行无返回数据的 SQL 此字段才会有值

### mysqlRecordsetObject.numFields() <a id="mysqlRecordsetObject.numFields" href="#mysqlRecordsetObject.numFields">&#x23;</a>
返回字段总数

### mysqlRecordsetObject.numRows() <a id="mysqlRecordsetObject.numRows" href="#mysqlRecordsetObject.numRows">&#x23;</a>
返回行数  
使用useResult创建的结果集必须在调用fetchRow获取所有行后才能调用该函数

### mysqlRecordsetObject.rowSeek(行偏移量) <a id="mysqlRecordsetObject.rowSeek" href="#mysqlRecordsetObject.rowSeek">&#x23;</a>
将行光标置于查询结果集中的任意行,并返回当前行号  
偏移值相对于rowTellb函数返回的当前行号  
该函数要求在客户端包含全部结果,即使用storeResult创建结果集

### mysqlRecordsetObject.rowTell() <a id="mysqlRecordsetObject.rowTell" href="#mysqlRecordsetObject.rowTell">&#x23;</a>
返回当前行号  
该函数要求在客户端包含全部结果,即使用storeResult创建结果集

### mysqlRecordsetObject.stepQuery() <a id="mysqlRecordsetObject.stepQuery" href="#mysqlRecordsetObject.stepQuery">&#x23;</a>
fetchObject 函数的别名,  
返回下一行记录的以字段名为键的关联数组

### 全局常量

### ::MySql <a id="::MySql" href="#::MySql">&#x23;</a>
[返回对象:dllModuleObject](https://www.aardio.com/zh-cn/docs/library-reference/raw/_.html#dllModuleObject)

### 自动完成常量
_MYSQL_DATABASE_DRIVER=0x1B58  
_MYSQL_DEFAULT_AUTH=0x17  
_MYSQL_ENABLE_CLEARTEXT_PLUGIN=0x24  
_MYSQL_INIT_COMMAND=2  
_MYSQL_OPT_BIND=0x18  
_MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS=0x25  
_MYSQL_OPT_COMPRESS=1  
_MYSQL_OPT_CONNECT_ATTR_ADD=0x21  
_MYSQL_OPT_CONNECT_ATTR_DELETE=0x22  
_MYSQL_OPT_CONNECT_ATTR_RESET=0x20  
_MYSQL_OPT_CONNECT_TIMEOUT=0  
_MYSQL_OPT_GUESS_CONNECTION=0x10  
_MYSQL_OPT_LOCAL_INFILE=8  
_MYSQL_OPT_MAX_ALLOWED_PACKET=0x27  
_MYSQL_OPT_NAMED_PIPE=6  
_MYSQL_OPT_NET_BUFFER_LENGTH=0x28  
_MYSQL_OPT_NONBLOCK=0x1770  
_MYSQL_OPT_PROTOCOL=9  
_MYSQL_OPT_READ_TIMEOUT=0xB  
_MYSQL_OPT_RECONNECT=0x14  
_MYSQL_OPT_SSL_CA=0x1B  
_MYSQL_OPT_SSL_CAPATH=0x1C  
_MYSQL_OPT_SSL_CERT=0x1A  
_MYSQL_OPT_SSL_CIPHER=0x1D  
_MYSQL_OPT_SSL_CRL=0x1E  
_MYSQL_OPT_SSL_CRLPATH=0x1F  
_MYSQL_OPT_SSL_ENFORCE=0x26  
_MYSQL_OPT_SSL_KEY=0x19  
_MYSQL_OPT_SSL_VERIFY_SERVER_CERT=0x15  
_MYSQL_OPT_USE_EMBEDDED_CONNECTION=0xF  
_MYSQL_OPT_USE_REMOTE_CONNECTION=0xE  
_MYSQL_OPT_USE_RESULT=0xD  
_MYSQL_OPT_WRITE_TIMEOUT=0xC  
_MYSQL_PLUGIN_DIR=0x16  
_MYSQL_PROGRESS_CALLBACK=0x176F  
_MYSQL_READ_DEFAULT_FILE=3  
_MYSQL_READ_DEFAULT_GROUP=4  
_MYSQL_REPORT_DATA_TRUNCATION=0x13  
_MYSQL_SECURE_AUTH=0x12  
_MYSQL_SERVER_PUBLIC_KEY=0x23  
_MYSQL_SET_CHARSET_DIR=5  
_MYSQL_SET_CHARSET_NAME=7  
_MYSQL_SET_CLIENT_IP=0x11  
_MYSQL_SHARED_MEMORY_BASE_NAME=0xA  
