Mysql【⛔计划废弃】


>i 本文档的最新修订日期是: > **2021-07-19** # Mysql(计划废弃) >d Mysql模块即将计划废弃,将在6.x版本中删除,且即刻起不再增添新功能。请使用 `Db` 模块代替。 ## 模块简述 本模块底层通过 `MySQLi` 驱动,进行 `CURD` (增删改查)以及执行自定义SQL语句的操作。 ## 依赖 本模块依赖于基础模块 `Log` 。 ## 模块配置 配置文件位于 `/Config/Mysql.php` 。 * **`Log`** `(Bool)` `FALSE` : 用以指定是否将报错信息写入日志。 `TRUE` 代表写入日志、`FALSE` 代表不写入日志,默认不写入日志。 * **`RW_Splitting`** `(Bool)` `FALSE`: 用以指定读写分离是否开启,当值为 `TRUE` 时开启,值为 `FALSE` 时关闭。 读写分离按照 `一主多从` 模式进行,其中 `default` 组为写入组,其余组为读取组,读取组选择的方式是 `随机选取` 。 如果要使用读写分离功能,至少需要一个读取组和一个写入组,此外您还需要对这些数据库进行 `额外的` 主从同步配置。 * **`DbInfo`** `(Array)` `(省略)` : 此配置项为一个二维数组(Array),用以指定数据库信息。在第一维数组中, `键` 为配置组名称, `值` 为一个数组,且该数组(即第二维数组)只能有以下五个元素: 1. 键为 `address` ,值为数据库地址。如果非远程数据库,请使用默认值 `localhost` ; 2. 键为 `username` ,值为数据库用户名; 3. 键为 `password` ,值为数据库密码; 4. 键为 `dbname` ,值为数据库名称; 5. 键为 `port` ,值为数据库端口号。 其中,配置组default `不可删除` ,也不可将default改为其他名称,可以在第一维数组中增加更多的元素以配置多数据库。 ## 公共参数 ### 表的指定 * **`table(表)`** `(String | Array)` `<必须>`: 用以指定所操作的数据表表名。 当本参数为 `String` 类型时,表示仅操作一个表。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值代表一个需要操作的表。 ### WHERE子句 * **`field(字段)`** `(String | Array)` `NULL`: 用以指定查询条件中的字段。 本参数值的类型应当与参数 `value` 保持一致,且传入本参数时, `value` 参数也必须被传入。 当本参数为 `String` 类型时,表示仅限定一个查询条件。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值代表一个限制条件,且元素与参数 `value` 以及参数 `condition` (如果传入)中的元素保持相互对应。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 * **`value(值)`** `(String | Array)` `NULL`: 用以指定查询条件中字段对应的值。 本参数值的类型应当与参数 `field` 保持一致,且传入本参数时, `field` 参数也必须被传入。 当本参数为 `String` 类型时,表示仅限定一个查询条件。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值代表一个字段,且元素与参数 `field` 以及参数 `condition`(如果传入)中的元素保持相互对应。 * **`condition(条件)`** `(String | Array)` `'='`: 用以确定参数 `field` 和参数 `value` 之间的比较符以及与下一个条件之间的并列关系,以及指定各个条件之间的优先级关系。 当本参数为 `String` 类型时,表示仅限定一个查询条件。 当本参数为 `Array` 类型时,数组键 `无需定义` ,值为 `比较符[,并列关系]` 的字符串,其中比较符为字段与条件值之间的比较符( `=``<>``>``>=``<=``<>``LIKE``NOT LIKE` ),并列关系为与下一个限制条件之间的并列关系( `and``or` ,未被定义时默认值为 `and` ),并且每一个元素与参数 `field` 和参数 `value` 中的元素保持相互对应。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 此外,还可以在多个限定条件中,确定条件(或条件组合)之间的优先级。 即在最终的SQL语句中,框架会根据传入的优先级参数的值,使用括号“()”对查询条件进行优先级的指定,例如 ```sql ... where `id` = '1' and ( `level` = 'a' or `class` > '3' ) ... ``` 的查询语句。 如需使用此特性,则参数 `condition` 必须为数组,且数组的每一个元素的值将由 `String` 类型改变为 `Array` 类型,且包含两个元素,且数组的键无需定义: 第一个元素的值为 `比较符[,并列关系]` 的字符串,该字符串的定义方式不再赘述。 第二个元素的值为 `前置括号[,后置括号]` 的字符串。其中前置括号为添加在该条件前的左括号,可以为0个或多个 `(` ;后置括号为添加在该条件后、下一个并列关系符前的右括号,可以为0个或多个 `)` 。 当仅需要添加右括号时,字符串应当定义为 `,后置括号` ,即起始字符为一个英文逗号。 若要实现上面的SQL语句,那么应该按下面的方式定义这三个参数: ```php $Field=array('id', 'level', 'class'); $Value=array('1', 'a', '3'); $Condition=array( '=,and', array( '=,or', '(' ), array( '>', ',)' ) ); ``` ### order by子句 * **`order(顺序)`** `(String | Array)` `默认值见方法参数`: 用以指定对结果排序时所依据的字段。 当本参数为 `String` 类型时,表示仅限定一个排序字段。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值代表一个排序所依据的字段,且元素与参数 `desc` (如果传入)中的元素保持相互对应。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 用以指定是否使用倒序的排序方式。 当本参数为 `Bool` 类型时,则指定所有字段的排序方式,`TRUE` 代表倒序、`FALSE` 代表正序,默认倒序。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值为一个字段排序所依据的方式,且元素与参数 `order` 中的元素保持相互对应。 例如,将结果按照字段 `id` 正序排序,并且按照 `money` 倒序排序: ```php $Order=array('id','money'); $Desc=array(TRUE,FALSE); ``` >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 ### 其它子句 * **`limit(限制)`** `(Array)` `NULL`: 用以从 `位置偏移量` 为起始行取得 `指定行数` 的记录。 数组的键无需定义,当数组仅存在一个元素时,此元素定义 `行数` ,此时位置偏移量 `默认为0` ;当数组存在两个元素时,第一个元素定义 `位置偏移量` ,第二个元素定义 `行数` 。 例如,从结果中的第3行开始取15行: ```php $Limit=array(2,15); //偏移量从0开始计算。 ``` * **`index(索引)`** `(Int)` `NULL`: 用以指定执行操作时使用的索引。 * **`sql(sql)`** `(String)` `NULL`: 附加执行自定义的SQL语句。 * **`group_by(分组)`** `(String | Array)` `NULL`: 用以指定对结果分组时所依据的字段。 当本参数为 `String` 类型时,表示仅指定一个分组依据的字段。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值代表一个排序所依据的字段。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 * **`field_limit(字段限制)`** `(String | Array)` `*`: 用以指定取回结果的字段范围。 当本参数为 `String` 类型时,表示仅指定一个取回的字段。 当本参数为 `Array` 类型时,数组键无需定义,每一个元素的值代表一个需要取回的字段。 `*` 代表取回所有字段。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 * **`data(数据)`** `(Array)` `默认值见方法参数`: 用以指定需要插入或更新的数据。 本参数中 `键` 为字段名, `值` 为字段名所对应的值。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 ## :: Choose()方法 ### 语法 **Mysql :: Choose ( 传参数组 )** ### 说明 在预配置的多个数据库中选择一个数据库。 此方法 `支持` 中文参数名。 ### 参数 * **`db(数据库)`** `(String)` `<必须>`: 所查询数据库的名称。 ### 返回 无。 ### 示例 请查阅 `Db` 模块说明文档中的同名方法。 ## :: Select()方法 ### 语法 **Mysql :: Select ( 传参数组 )** ### 说明 查询单条数据表记录。 本方法相比于 `SelectMore` 方法,更适合于例如查询用户信息这样单一的数据,性能更优异。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(String | Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`field(字段)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`value(值)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`condition(条件)`** `(String | Array)` `'='`: 详见本模块 `公共参数` 部分的说明。 * **`order(顺序)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 详见本模块 `公共参数` 部分的说明。 * **`index(索引)`** `(Int)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`field_limit(字段限制)`** `(String | Array)` `*`: 详见本模块 `公共参数` 部分的说明。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 `(Array)` 类型。 查询到记录时,返回值为一个数组,记录的每一个字段为一个 `键` ,每一个记录值为一个数组的 `值` ,且数组中键值的对应关系与记录中字段和记录值的对应关系相同。 当查询到的记录为空时,返回值为一个 `空数组` 。 ## :: SelectMore()方法 ### 语法 **Mysql :: SelectMore ( 传参数组 )** ### 说明 查询多条数据表记录。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(String | Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`field(字段)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`value(值)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`condition(条件)`** `(String | Array)` `'='`: 详见本模块 `公共参数` 部分的说明。 * **`order(顺序)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 详见本模块 `公共参数` 部分的说明。 * **`limit(限制)`** `(Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`index(索引)`** `(Int)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`field_limit(字段限制)`** `(String | Array)` `*`: 详见本模块 `公共参数` 部分的说明。 * **`group_by(分组)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 `(Array)` 类型。 查询到记录时,返回值为 `二维数组` ,在第一维的数组中,键为从 `0` 开始的自增键,值为一行记录的集合的一维数组;在第二维数组中, `键` 为字段名, `值` 为该条记录中字段所对应的记录值。 当查询到的记录为空时,返回值为一个 `空数组` 。 ## :: Total()方法 ### 语法 **Mysql :: Total ( 传参数组 )** ### 说明 统计符合条件的记录数量。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(Int)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`field(字段)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`value(值)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`condition(条件)`** `(String | Array)` `'='`: 详见本模块 `公共参数` 部分的说明。 * **`order(顺序)`** `(String | Array)` `'Total'`: 详见本模块 `公共参数` 部分的说明。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 详见本模块 `公共参数` 部分的说明。 * **`limit(限制)`** `(Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`index(索引)`** `(Int)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`group_by(分组)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 `(Array)` 类型。 当未指定 `group_by` 参数时,将直接返回符合条件的记录总数;否则将返回依据 `group_by` 参数分组而形成的结果集。 ## :: Sum()方法 ### 语法 **Mysql :: Sum ( 传参数组 )** ### 说明 对符合条件的指定列的记录值进行累加,并将结果放在一行中。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(String | Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`field(字段)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`value(值)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`condition(条件)`** `(String | Array)` `'='`: 详见本模块 `公共参数` 部分的说明。 * **`order(顺序)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 详见本模块 `公共参数` 部分的说明。 * **`limit(限制)`** `(Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`index(索引)`** `(Int)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`sum(合计)`** `(Array)` `<必须>`: 用以指定对结果分组时所依据的字段。 每一个元素的键代表一个需要累加的字段,值代表该字段在结果中的字段别名。 >w 如需进行多表操作,可以将传入的字段名设置为 `<表名>*<字段名>` ,例如 `student*id` 代表的就是 `student` 表的 `id` 字段。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 `(Array)` 类型。 将返回结果集。 ## :: Insert()方法 ### 语法 **Mysql :: Insert ( 传参数组 )** ### 说明 插入数据,并返回新记录的主键。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(String | Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`data(数据)`** `(Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 `(Int)` 类型。 值为插入成功后该行记录的主键。 ## :: Delete()方法 ### 语法 **Mysql :: Delete ( 传参数组 )** ### 说明 删除符合条件的记录。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(String | Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`field(字段)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`value(值)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`condition(条件)`** `(String | Array)` `'='`: 详见本模块 `公共参数` 部分的说明。 * **`order(顺序)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 详见本模块 `公共参数` 部分的说明。 * **`limit(限制)`** `(Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`index(索引)`** `(Int)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 无。 ## :: Update()方法 ### 语法 **Mysql :: Update ( 传参数组 )** ### 说明 更新符合条件的记录。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`table(表)`** `(String | Array)` `<必须>`: 详见本模块 `公共参数` 部分的说明。 * **`field(字段)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`value(值)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`condition(条件)`** `(String | Array)` `'='`: 详见本模块 `公共参数` 部分的说明。 * **`order(顺序)`** `(String | Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`desc(降序)`** `(Bool | Array)` `FALSE`: 详见本模块 `公共参数` 部分的说明。 * **`limit(限制)`** `(Array)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`index(索引)`** `(Int)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`data(数据)`** `(Array)` `默认值见方法参数`: 详见本模块 `公共参数` 部分的说明。 * **`auto_operate(自动操作)`** `(String | Array)` `NULL`: 用以指定自动更新的方式。 例如 `+1` 则会使指定的字段值自动+1,详见MySQL官方手册。 键无需定义,值为表达式,并且每一个元素与参数 `data` 中的元素保持 `相互对应` 。 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 ### 返回 无。 ## :: Other()方法 ### 语法 **Mysql :: Other ( 传参数组 )** ### 说明 执行自定义的SQL语句。 >d 务必注意对来自于用户提交的数据进行安全过滤(使用Receive模块中的方法),如果最终执行的语句出现额外的 `'` 等SQL语法符号时,框架将报错。 此方法 `支持` 中文参数名。 ### 参数 * **`sql(sql)`** `(String)` `NULL`: 详见本模块 `公共参数` 部分的说明。 * **`fetch_result(取回结果)`** `(Bool)` `FALSE`: 用以指定是否取回结果集。当值为 `FALSE` 时,将返回一个 `Mysqli->query` 对象;当值为 `TRUE` 时,将以 `MYSQLI_ASSOC` 方式取回数据集,返回一个数组。 ### 返回 `(Object | Array)` 类型。 `Mysqli->query` 对象或二维数组或不含任何元素的空数组。 ## :: BackUp()方法 ### 语法 **Mysql :: BackUp ( 传参数组 )** ### 说明 对数据库进行备份,并将备份文件存储至指定路径。 此方法 `支持` 中文参数名。 ### 参数 * **`path(路径)`** `(String)` `<必须>`: 指定备份的文件存储到何处,值为相对于 `应用根目录`(即Core、Source文件夹所在的目录,通常是站点根目录)的目录路径,以 `/` 开始。 ### 返回 `(String)` 类型。 返回的值为备份后的SQL文件的文件路径,您可以依据此路径对备份后的文件进行其它操作。 >d 为了服务器的安全,请尽可能的避免数据库备份文件 `长时间` 保存在服务器上。