Db

<br/> >i 本文档的最新修订日期是: > **2024-02-28** # Db :: 本模块底层通过 <font color="#c7254e">`PDO`</font> 驱动,进行 <font color="#c7254e">`CURD`</font> (增删改查)以及执行自定义SQL语句的操作。 >d 良好的数据库命名习惯是开发优秀程序的必要条件,一时偷懒,遗臭万年。 本模块中数据库名称、表名称、字段名只允许由这些ASCII字符组成:<font color="#c7254e">`[0-9,a-z,A-Z$_]`</font>,否则可能会出现错误。 >w 尽管PDO能够连接多种数据库,但本模块仍然以 <font color="#c7254e">`MySQL`</font> (或兼容MySQL语法的其他数据库)作为主要适配的数据库,并基于此衍生出各种功能特性。也就是说,本模块无法确保在其它数据库中拥有完全一致的使用效果,甚至可能在其他数据库无法使用,这取决于其他数据库对MySQL语法的兼容程度。 # 依赖 本模块依赖于基础模块 <font color="#c7254e">`Log`</font> 。 # 模块配置 配置文件位于 <font color="#c7254e">`/config/core/Db.php`</font> 。 * **<font color="#ff6600">`log`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#bbbbbb">`false`</font> : 用以指定是否将最终执行的SQL语句以 <font color="#c7254e">`debug`</font> 级别提交到日志缓存中。 <font color="#c7254e">`true`</font> 代表提交到日志、<font color="#c7254e">`false`</font> 代表不提交到日志,默认不提交到日志。 日志缓存是否会被写入日志文件,取决于 <font color="#c7254e">`Log`</font> 模块的相关配置。 * **<font color="#ff6600">`dbInfo`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`(省略)`</font> : 此配置项为一个二维数组(Array),用以指定数据库信息。在第一维数组中, <font color="#c7254e">`键`</font> 为配置组名称, <font color="#c7254e">`值`</font> 为一个数组,且该数组(即第二维数组)只能有以下六个元素: * <font color="#c7254e">`type`</font> :值为数据库驱动类型。取值范围可查阅 [PDO驱动列表](https://www.php.net/manual/zh/pdo.drivers.php) 以及 [获取可用的PDO驱动](https://www.php.net/manual/zh/pdo.getavailabledrivers.php) 。 * <font color="#c7254e">`address`</font>:值为数据库地址。如果非远程数据库,请使用默认值 <font color="#c7254e">`localhost`</font> 。 * <font color="#c7254e">`username`</font>:值为数据库用户名。 * <font color="#c7254e">`password`</font>:值为数据库密码。 * <font color="#c7254e">`dbname`</font>:值为数据库名称。 * <font color="#c7254e">`port`</font>:值为数据库端口号。 * **<font color="#ff6600">`default`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`'default'`</font>: 用以指定默认链接的数据库的名称。 值必须为配置项 <font color="#c7254e">`dbInfo`</font> 中第一维数组中任意一个元素的键名。 * **<font color="#ff6600">`tableAlias`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定表的别名。 数组元素的键为别名名称,元素的值为对应的真实表名称。 # 公共参数 ## 数据库的指定 * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font>: 用以指定所操作的数据库的名称。 本参数的值必须为配置项 <font color="#c7254e">`dbInfo`</font> 中第一维数组中任意一个元素的键名。 除 <font color="#c7254e">`choose`</font> 方法外,指定本参数不会影响后续操作所使用的数据库,即如果后续操作未指定本参数,则仍然使用默认的数据库。 除了使用本参数,还支持在字段、表名中指定数据库。 ## 表的指定 * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font>: 用以指定所操作的数据表表名。 数组键无需定义,每一个元素的值代表一个需要操作的表。 如需操作多库,可以将元素的值设置为 <font color="#c7254e">`<库名>.<表名>`</font>,例如 <font color="#c7254e">`db1.users`</font> 代表的就是 <font color="#c7254e">`db1`</font> 数据库的 <font color="#c7254e">`users`</font> 表。 >i 通过本方式操作多数据库,请确保连接所使用的账号对需要操作的多个数据库有相应的权限。 ## WHERE子句 * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定查询条件中的字段。 数组键无需定义,每一个元素的值代表一个限制条件,且元素与参数 <font color="#c7254e">`value`</font> 以及参数 <font color="#c7254e">`condition`</font> (如果传入)中的元素保持相互对应。 * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定查询条件中字段对应的值。 数组键无需定义,每一个元素的值代表一个字段,且元素与参数 <font color="#c7254e">`field`</font> 以及参数 <font color="#c7254e">`condition`</font>(如果传入)中的元素保持相互对应。 如果传入的字段对应的值是一个数组(即第一维数组中的元素的值仍为数组),将自动转换为 <font color="#c7254e">`JSON字符串`</font> 。 * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以确定参数 <font color="#c7254e">`field`</font> 和参数 <font color="#c7254e">`value`</font> 之间的比较符以及与下一个条件之间的并列关系,以及指定各个条件之间的优先级关系。 当本参数为 <font color="#c7254e">`String`</font> 类型时,表示仅限定一个查询条件。 当本参数为 <font color="#c7254e">`Array`</font> 类型时,数组键 <font color="#c7254e">`无需定义`</font> ,值为 <font color="#c7254e">`[前置括号,][比较符][,后置括号][,并列关系]`</font> 的字符串,并且每一个元素与参数 <font color="#c7254e">`field`</font> 和参数 <font color="#c7254e">`value`</font> 中的元素保持相互对应。其中: * <font color="#c7254e">`前置括号`</font> 为添加在该条件前的左括号,可以为0个或多个 <font color="#c7254e">`(`</font>; * <font color="#c7254e">`比较符`</font> 为字段与条件值之间的比较符(<font color="#c7254e">`=`</font>,<font color="#c7254e">`!=`</font>,<font color="#c7254e">`<`</font>,<font color="#c7254e">`>`</font>,<font color="#c7254e">`>=`</font>,<font color="#c7254e">`<=`</font> ,<font color="#c7254e">`<>`</font>,<font color="#c7254e">`IS NULL`</font>,<font color="#c7254e">`IS NOT NULL`</font>,<font color="#c7254e">`LIKE`</font>,<font color="#c7254e">`NOT LIKE`</font>),默认为 <font color="#c7254e">`=`</font>; * <font color="#c7254e">`后置括号`</font> 为添加在条件值后、下一个并列关系符前的右括号,可以为0个或多个 <font color="#c7254e">`)`</font>; * <font color="#c7254e">`并列关系`</font> 为与下一个限制条件之间的并列关系(<font color="#c7254e">`and`</font> 或 <font color="#c7254e">`or`</font>,未被定义时默认值为 <font color="#c7254e">`and`</font>)。 如果元素为空字符串,或者未指定元素,那么等同于指定了元素值为 <font color="#c7254e">`'=,and'`</font> 。 在最终的SQL语句中,框架会根据传入的优先级参数的值,使用括号“()”对查询条件进行优先级的指定,例如: ```sql ... where `id` = '1' and ( `level` = 'a' or `class` > '3' ) ... ``` 若要实现上面的SQL语句,那么应该按下面的方式定义这三个参数: ```php $Field= [ 'id' , 'level' ,'class']; $Value= [ '1' , 'a' ,'3' ]; $Condition=[ '=,and' , '(,=,or' , '>,)' ]; ``` ## ORDER BY子句 * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定对结果排序时所依据的字段。 数组键无需定义,每一个元素的值代表一个排序所依据的字段,且元素与参数 <font color="#c7254e">`desc`</font> (如果传入)中的元素保持相互对应。 * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定是否使用倒序的排序方式。 数组键无需定义,每一个元素的值为一个字段排序所依据的方式,且元素与参数 <font color="#c7254e">`order`</font> 中的元素保持相互对应。 元素的值应为 <font color="#c7254e">`Bool`</font> 类型,<font color="#c7254e">`true`</font> 代表倒序、<font color="#c7254e">`false`</font> 代表正序,元素不存在时默认正序。 例如,将结果按照字段 <font color="#c7254e">`id`</font> 正序排序,并且按照字段 <font color="#c7254e">`money`</font> 倒序排序: ```php $Order=['id','money']; $Desc=[false,true]; ``` ## 更多子句 * **<font color="#ff6600">`limit(限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以从 <font color="#c7254e">`位置偏移量`</font> 为起始行取得 <font color="#c7254e">`指定行数`</font> 的记录。 数组的键无需定义,第一个元素定义 <font color="#c7254e">`位置偏移量(最小为0)`</font>,第二个元素定义 <font color="#c7254e">`行数`</font> 。 例如,从结果中的第3行开始取15行: ```php $Limit=[2,15]; //偏移量从0开始计算,因此第一个元素的值应为3-1。 ``` >i 如果希望 <font color="#c7254e">`行数`</font> 为查询结果的最大数量,请将值设置为 <font color="#c7254e">`-1`</font> 。 * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定表索引的使用规则。 数组键无需定义,元素与参数 <font color="#c7254e">`table`</font> 中的元素保持相互对应,每一个元素的值即为对应表要使用的索引规则。如果参数 <font color="#c7254e">`table`</font> 的值是字符串,则默认使用第一个元素作为索引规则。如果不存在对应的元素,则不指定对应表的索引规则。 元素的值应该类似于如下形式: ```php $Index=['FORCE INDEX(`PRIMARY`)']; ``` 详细的规则语句,请参阅数据库说明文档。对于MySQL,可参阅如下文档: <font color="#c7254e">`v5.7`</font>:[https://dev.mysql.com/doc/refman/5.7/en/index-hints.html](https://dev.mysql.com/doc/refman/5.7/en/index-hints.html) <font color="#c7254e">`v8.0`</font>:[https://dev.mysql.com/doc/refman/8.0/en/index-hints.html](https://dev.mysql.com/doc/refman/8.0/en/index-hints.html) <font color="#c7254e">`v8.1`</font>:[https://dev.mysql.com/doc/refman/8.1/en/index-hints.html](https://dev.mysql.com/doc/refman/8.1/en/index-hints.html) * **<font color="#ff6600">`group_by(分组)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定对结果分组时所依据的字段。 数组键无需定义,每一个元素的值代表一个排序所依据的字段。 * **<font color="#ff6600">`field_limit(字段限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定取回结果的字段范围。 当本参数为 <font color="#c7254e">`String`</font> 类型时,表示仅指定一个取回的字段。 当本参数为 <font color="#c7254e">`Array`</font> 类型时,数组键无需定义,每一个元素的值代表一个需要取回的字段。 <font color="#c7254e">`*`</font> 代表取回所有字段。 如果需要使用 <font color="#c7254e">`AS`</font> 关键字,请使用 <font color="#c7254e">`->`</font> 代替。 * **<font color="#ff6600">`data(数据)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>: 用以指定需要插入或更新的数据。 本参数中 <font color="#c7254e">`键`</font> 为字段名, <font color="#c7254e">`值`</font> 为字段名所对应的值。 如果传入的字段对应的值是一个数组(即第一维数组中的元素的值仍为数组),将自动转换为 <font color="#c7254e">`JSON字符串`</font> 。 ## 其它参数 * **<font color="#ff6600">`row_count(行数统计)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>: 是否统计数据库中受到操作执行影响的行数。当值为 <font color="#c7254e">`true`</font> 时统计,值为 <font color="#c7254e">`false`</font> 时不统计。 * **<font color="#ff6600">`unlock(解锁)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>: 是否允许对不设条件地对整个数据表进行操作。当值为 <font color="#c7254e">`true`</font> 时允许,值为 <font color="#c7254e">`false`</font> 时不允许。仅当您的预期中会出现改动或删除表中所有记录时,此参数才应传入 <font color="#c7254e">`true`</font> 。 当出现全表操作,但参数值为 <font color="#c7254e">`false`</font> 时,将产生报错。 * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>: 是否终止程序并展现执行前的SQL。当值为 <font color="#c7254e">`true`</font> 时,最终执行前的SQL字符串将会以报错的当时展现(此时执行流程已被终止,将不会执行SQL语句),当值为<font color="#c7254e">`false`</font> 时不允许。 当执行结果非预期时,可利用此参数检查其它参数是否正确的被传入。 * **<font color="#ff6600">`unlock(解锁)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>: 是否允许对不设条件地对整个数据表进行操作。当值为 <font color="#c7254e">`true`</font> 时允许,值为 <font color="#c7254e">`false`</font> 时不允许。仅当您的预期中会出现改动或删除表中所有记录时,此参数才应传入 <font color="#c7254e">`true`</font> 。 当出现全表操作,但参数值为 <font color="#c7254e">`false`</font> 时,将产生报错。 * **<font color="#ff6600">`json(json)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用以指定将查询结果中的哪些JSON格式的字段转换为JSON字符串对应的数组。 数组键无需定义,字段名作为每一个元素的值,代表需要取回的字段。 * **<font color="#ff6600">`return_object(返回对象)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>: 用以指定将JSON字符串转换为对象还是数组。 当值为 <font color="#c7254e">`true`</font> 时转换为对象,值为 <font color="#c7254e">`false`</font> 时转换为数组。 # 原生模式:使用数据库函数、关键字或运算符 在以下参数: * **<font color="#ff6600">`data(数据)`</font>** 中数组元素的键名 * **<font color="#ff6600">`field(字段)`</font>** 中数组元素的值 * **<font color="#ff6600">`field_limit(字段限制)`</font>** 中数组元素的值 如果字符串以 <font color="#c7254e">`#`</font> 字符开头时,字符串将不再作为字段名处理,此时可以使用MySQL支持的各种关键字及函数,除了开头的 <font color="#c7254e">`#`</font> 字符,其余字符将直接组装入SQL语句中。 如果需要对SQL进行PDO参数绑定,可以用 <font color="#c7254e">`?`</font> 作为PDO参数绑定的变量,并且: * 对于参数 **<font color="#ff6600">`field(字段)`</font>**,应在参数 **<font color="#ff6600">`value(值)`</font>** 中的对应位置传入需要PDO参数绑定的值。此时在参数 **<font color="#ff6600">`condition(条件)`</font>** 参数中的 <font color="#c7254e">`比较符`</font> 不生效,因此需要传入完整的SQL子句。 * 对于参数 **<font color="#ff6600">`data(数据)`</font>**,在本模块 <font color="#c7254e">`update()`</font> 方法中,应将键名对应的元素值设置为需要PDO参数绑定的值。 在原生模式下,如需使用 <font color="#c7254e">`表别名`</font> 功能,可以通过 <font color="#c7254e"><code>&#96;</code></font>(反引号) 将带有字段名包裹住,形如 <font color="#c7254e"><code>&#96;<库名>.<表名>.<字段名>&#96;</code></font> 或 <font color="#c7254e"><code>&#96;<表名>.<字段名>&#96;</code></font> 。框架会自动进行表别名替换,例如: ```php $Type=intval($_GET['type']); $Config = [ '表' => ['用户摘要表','用户详情表'], '字段' => ['用户摘要表.enable','#`用户摘要表.type`>?','#`用户摘要表.id`=`用户详情表.id`'], '值' => ['0',$Type,''], '条件' => ['>=,AND'], '字段限制' => ['用户摘要表.*'], ]; $Result= \core\Db::selectMore($Config); ``` # 指定数据类型 在以下参数: * **<font color="#ff6600">`data(数据)`</font>** 中数组元素的键名 * **<font color="#ff6600">`field(字段)`</font>** 中数组元素的值 * **<font color="#ff6600">`field_limit(字段限制)`</font>** 中数组元素的值 在使用MySQL内置JSON函数检索数据时,需要准确指定数据类型才可正确检索。因此,在以上参数中,如果字符串以 <font color="#c7254e">`(*)`</font> 开头时,将能够为绑定的参数指定数据类型,否则将绑定的参数作为字符串处理。 其中, <font color="#c7254e">`*`</font> 可以为这些数据类型: <font color="#c7254e">`BOOL|NULL|INT|STR|STR_NATL|STR_CHAR|LOB`</font> 。 有关这些数据类型的详细含义,请参阅 [https://www.php.net/manual/zh/pdo.constants.php](https://www.php.net/manual/zh/pdo.constants.php) 。 如果需要对SQL进行PDO参数绑定,可以用 <font color="#c7254e">`?`</font> 作为PDO参数绑定的变量,并且: 在原生模式下,依然可以指定数据类型,例如: ```php $Price=intval($_GET['price']); $Config = [ '表' => ['商品信息表'], '字段' => ['(int)#`price`-> \'$.price_online\' <= ?'], '值' => $Price ]; $Result= \core\Db::selectMore($Config); ``` # 操作多库多表 如需操作多库多表,可以将传入的字段名设置为 <font color="#c7254e">`<库名>.<表名>.<字段名>`</font> 或 <font color="#c7254e">`<表名>.<字段名>`</font> ,例如 <font color="#c7254e">`student.id`</font> 代表的就是 <font color="#c7254e">`student`</font> 表的 <font color="#c7254e">`id`</font> 字段。 >i 通过本方式操作多数据库,请确保连接所使用的账号对需要操作的多个数据库有相应的权限。 仅对如下参数有效: * **<font color="#ff6600">`field_limit(字段限制)`</font>** * **<font color="#ff6600">`group_by(分组)`</font>** * **<font color="#ff6600">`desc(降序)`</font>** * **<font color="#ff6600">`order(排序)`</font>** * **<font color="#ff6600">`field(字段)`</font>** * **<font color="#ff6600">`sum(合计)`</font>** * **<font color="#ff6600">`data(数据)`</font>** 中的数组键名 # 使用表别名 在应用的初期开发中,可能会出现表名称需要调整的情况,如果将真实的表名称写入代码中,后期调整表名称时会非常麻烦。使用表别名,将显著增加代码可读性及解耦代码。 表别名在参数 <font color="#c7254e">`sql`</font> 中不生效。 例如,配置文件中作如下定义: ```PHP <?php $_SERVER['APIPHP']['Config']['core\Db']=[ //已省略无关代码 'tableAlias'=>[ '商品摘要表'=>'goods_summary_list', '商品详情表'=>'goods_detail_list', ] ]; ``` 则可以作如下使用方式: ```PHP <?php $Config = [ '表' => ['商品摘要表','商品详情表'], '字段' => ['商品摘要表.state'], '值' => ['1'] '字段限制' => ['商品摘要表.*'] ]; $List = \core\Db::SelectMore($Config); ``` >i 表别名应当使用与真实表名不同的命名规则,例如使用中文、下划线、增加前缀等方式,增加代码可读性,避免别名与真实表名重复。 # choose() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">choose</font> ( <kbd>传参数组</kbd> )</font>** 在预配置的多个数据库中选择一个数据库。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 此方法会替代配置文件中 <font color="#c7254e">`default`</font> 配置项的值,从而影响后续操作在未指定数据库情况下,所使用的默认数据库。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> ## 返回 无。 # select() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">select</font> ( <kbd>传参数组</kbd> )</font>** 查询单条数据表记录。 本方法相比于 <font color="#c7254e">`SelectMore`</font> 方法,更适合于例如查询用户信息这样单一的数据,性能更优异。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Int)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`field_limit(字段限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`json(json)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`return_object(返回对象)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(Object|Array|Bool)`</font> 类型。 查询到记录时,返回值为一个数组,记录的每一个字段为一个 <font color="#c7254e">`键`</font> ,每一个记录值为一个数组的 <font color="#c7254e">`值`</font> ,且数组中键值的对应关系与记录中字段和记录值的对应关系相同。 如果参数 <font color="#c7254e">`return_object(返回对象)`</font> 传入的值为 <font color="#c7254e">`true`</font> ,则返回的值类型为 <font color="#c7254e">`Object`</font> 。 当查询到的记录为空时,返回值为 <font color="#c7254e">`false`</font> 。 # selectMore() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">selectMore</font> ( <kbd>传参数组</kbd> )</font>** 查询多条数据表记录。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`limit(限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`field_limit(字段限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`group_by(分组)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`json(json)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`return_object(返回对象)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(Object|Array)`</font> 类型。 查询到记录时,返回值为 <font color="#c7254e">`二维数组`</font> ,在第一维的数组中,键为从 <font color="#c7254e">`0`</font> 开始的自增键,值为一行记录的集合的一维数组;在第二维数组中, <font color="#c7254e">`键`</font> 为字段名, <font color="#c7254e">`值`</font> 为该条记录中字段所对应的记录值。 当查询到的记录为空时,返回值为一个 <font color="#c7254e">`空数组`</font> 。 如果参数 <font color="#c7254e">`return_object(返回对象)`</font> 传入的值为 <font color="#c7254e">`true`</font> ,则返回的值类型为 <font color="#c7254e">`Object`</font> 。 # total() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">total</font> ( <kbd>传参数组</kbd> )</font>** 统计符合条件的记录数量。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Int)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`limit(限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`group_by(分组)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(Array)`</font> 类型。 当未指定 <font color="#c7254e">`group_by`</font> 参数时,将直接返回符合条件的记录总数;否则将返回依据 <font color="#c7254e">`group_by`</font> 参数分组而形成的结果集。 # sum() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">sum</font> ( <kbd>传参数组</kbd> )</font>** 对符合条件的指定列的记录值进行累加,并将结果放在一行中。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 * **<font color="#ff6600">`sum(合计)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font>: 用以指定对结果分组时所依据的字段。 每一个元素的键代表一个需要累加的字段,值代表该字段在结果中的字段别名。 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`limit(限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(Array)`</font> 类型。 将返回结果集。 # insert() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">insert</font> ( <kbd>传参数组</kbd> )</font>** 插入数据,并返回新记录的主键。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> * **<font color="#ff6600">`data(数据)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(Int)`</font> 类型。 值为插入成功后该行记录的主键。 # delete() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">delete</font> ( <kbd>传参数组</kbd> )</font>** 删除符合条件的记录。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`limit(限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`row_count(行数统计)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`unlock(解锁)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(NULL|Int)`</font> 类型。 返回 <font color="#c7254e">`NULL`</font> 或受到影响的行数。 # update() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">update</font> ( <kbd>传参数组</kbd> )</font>** 更新符合条件的记录。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`table(表)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> * **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`condition(条件)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`order(排序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`desc(降序)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`limit(限制)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`index(索引)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`data(数据)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font> * **<font color="#ff6600">`row_count(行数统计)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> * **<font color="#ff6600">`unlock(解锁)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> * **<font color="#ff6600">`debug(调试)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font> ## 返回 <font color="#0099ff">`(NULL|Int)`</font> 类型。 返回 <font color="#c7254e">`NULL`</font> 或受到影响的行数。 # raw() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">raw</font> ( <kbd>传参数组</kbd> )</font>** 执行自定义的SQL语句。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 * **<font color="#ff6600">`fetch_result(取回结果)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>: 用以指定是否取回结果集。当值为 <font color="#c7254e">`false`</font> 时,将返回 <font color="#c7254e">`NULL`</font> ;当值为 <font color="#c7254e">`true`</font> 时,将以 <font color="#c7254e">`PDO::FETCH_ASSOC`</font> 方式取回数据集,返回一个数组。 * **<font color="#ff6600">`sql(sql)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font>: 附加在 <font color="#c7254e">`WHERE子句`</font> 后的自定义SQL语句。 如需进行参数绑定,请在字段名前加上 <font color="#c7254e">`:`</font> 字符。 * **<font color="#ff6600">`bind(绑定)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`[]`</font>: 用于指定在自定义的SQL语句中进行PDO参数绑定。 本参数中 <font color="#c7254e">`键`</font> 为字段名(字段名无需 <font color="#c7254e">`:`</font> 前缀), <font color="#c7254e">`值`</font> 为字段名所对应的值。 >w 从安全的角度,强烈建议通过 <font color="#c7254e">`参数绑定`</font> 避免注入风险。 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font> ## 返回 <font color="#0099ff">`(NULL | Array)`</font> 类型。 <font color="#c7254e">`NULL`</font> 或不含任何元素的空数组。 # acid() ## 说明 **<font color="#0099ff"><font color="#ff6600">Db</font> :: <font color="#ff6600">acid</font> ( <kbd>传参数组</kbd> )</font>** 进行事务操作。 此方法 <font color="#c7254e">`支持`</font> 中文参数名。 此方法 <font color="#c7254e">`支持`</font> 参数简写。 ## 参数 * **<font color="#ff6600">`option(操作)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font>: 用以指定执行的事务操作类型。 当值为 <font color="#c7254e">`start`</font> 时代表开始事务;值为 <font color="#c7254e">`commit`</font> 时代表提交事务;值为 <font color="#c7254e">`cancel`</font> 时代表回滚事务。 以下参数详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明: * **<font color="#ff6600">`db_name(数据库)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</font> >d 如果在开始事务时指定了本参数,那么直到提交/回滚事务操作结束前,都必须在每一个数据库操作中指定相同的本参数,否则将会中断事务。 ## 返回 <font color="#0099ff">`(Bool)`</font> 类型。 返回的值为 <font color="#c7254e">`true`</font> 时代表操作成功,值为 <font color="#c7254e">`false`</font> 时代表操作失败。