ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 数据基本操作 微擎系统数据库操作使用 PDO 兼容方式,以参数绑定的形式进行查询操作。 系统已对 PDO 兼容性进行检测及封装。下面具体说明一下数据库的几种基本操作方法。 ### tablename() 为了防止微擎系统的表与其它系统命名冲突,安装微擎时均会指定一个表前缀,在写SQL语句时,需要将表名称附加上表前缀。可以使用`tablename()`函数。 ~~~ $sql = "SELECT * FROM ".tablename('users');echo $sql; //输出 SELECT * FROM ims_users ~~~ ## 范围条件操作 在**微擎20160601**以后的版本中,增加了`pdo_get`、`pdo_getall`、`pdo_getcolumn`、`pdo_getslice`、`pdo_insert`、`pdo_update`、`pdo_delete`的范围条件的支持,具体支持的范围操作符如下: ~~~ $allow_operator = array('>', '<', '<>', '!=', '>=', '<=', '+=', '-=', 'LIKE', 'like'); ~~~ **示例:** ~~~ //获取acid大于269的公众号 $account = pdo_get('account', array('acid >' => '269')); //增加一次用户的错误登录次数,两次变为2即可 pdo_update('users_failed_login', array('count +=' => 1), array('username' => 'mizhou')); ~~~ ## IN 和 NOT IN 当传入的条件数组的值为数组时,系统会自动转成成 IN 语句,如果和 <> 或 != (不等于)一起使用时,会自动转换为 NOT IN。 **示例:** ~~~ pdo_getall('users', array('uid' => array('1', '2', '3'))); //对应的SQL语句调用 pdo_fetchall("SELECT * FROM `ims_users` WHERE `uid` IN (:__uid_0,:__uid_1,:__uid_2)", array(':__uid_0' => 1, ':__uid_1' => 2, ':__uid_2' => 3)); ~~~ ~~~ pdo_getall('users', array('uid <>' => array('1', '2', '3'))); //对应的SQL语句调用 pdo_fetchall("SELECT * FROM `ims_users` WHERE `uid` NOT IN (:__uid_0,:__uid_1,:__uid_2)", array(':__uid_0' => 1, ':__uid_1' => 2, ':__uid_2' => 3)); ~~~ ### IS NULL 和 IS NOT NULL 当且仅当值为大写的NULL字符串时,系统会认为这是需要查询NULL值,会将SQL写成 IS NULL 的形式,具体如下: ~~~ pdo_get('users', array('username' => 'NULL')); //此语句会转化为 SELECT * FROM user WHERE username IS NULL ~~~ ## 聚合查询 当获取的字段中是聚合字段时,比如`COUNT(*)`,`SUM()`等,如果指定过别名,则可以真通过别名获取值,如果未指定别名,则可以通过字段排序的索引获取。 **示例:** ~~~ $usercount = pdo_get('users', array(), array('COUNT(*)', 'uid', 'MAX(uid)', 'MIN(uid) AS minuid')); //$usercount 值为 Array ( [0] => 103 //总数 [uid] => 1 [2] => 179 //最大UID [minuid] => 1 //最小UID) ~~~ ## 链示查询 自微擎 v1.5.7 版本以后,增加链式查询类,提供面向对象方式查询数据,链式查询只支持一些常用简单的查询过于复杂的业务需求还是建议直接使用SQL语句。 查询用户表中的前十条男性的用户数据,代码如下: ~~~ $query = load()->ob<x>ject('query'); $row = $query->from('users')->where('type', '1')->orderby('uid', 'desc')->limit(10)->getall(); ~~~