数据库基本操作
本文整理于网络,仅供阅读参考,如有不妥之处,敬请批评指正!如果您想加入微擎社区版技术大牛微信群和QQ群,请联系微信: ccccyyyy4444 或者 QQ:155120699
数据基本操作
微擎系统数据库操作使用 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
)
链示查询
链式查询只支持一些常用简单的查询过于复杂的业务需求还是建议直接使用SQL语句。
查询用户表中的前十条男性的用户数据,代码如下:
$query = load()->object('query');
$row = $query->from('users')->where('type', '1')->orderby('uid', 'desc')->limit(10)->getall();
如果看不懂微擎社区版二次开发手册或者遇到问题,请联系微信: ccccyyyy4444 或者 QQ:155120699 ,如果我们有空闲时间,可以免费为您答疑解惑。