数据基本操作
有调系统数据库操作使用 PDO 兼容方式,以参数绑定的形式进行查询操作。
系统已对 PDO 兼容性进行检测及封装。下面具体说明一下数据库的几种基本操作方法。
tablename()
为了防止有调系统的表与其它系统命名冲突,有调均会指定一个表前缀,在写SQL语句时,需要将表名称附加上表前缀。可以使用 tablename() 函数。
~~~
$sql = "SELECT * FROM ".tablename('users');
echo $sql;
~~~
//输出 SELECT * FROM ims_users
范围条件操作
在有调的版本中,增加了pdo_get、pdo_getall、pdo_getcolumn、pdo_getslice、pdo_insert、pdo_update、pdo_delete的范围条件的支持,具体支持的范围操作符如下:
`array('>', '<', '<>', '!=', '>=', '<=', 'NOT IN', 'not in', '+=', '-=');`
字段名与操作符组成条件数组的键名,字段名与操作符中间间隔一个空格,具体使用方法如下:
~~~
~~~
//获取acid大于269的公众号
$account = pdo_get('account', array('acid >' => '269'));
~~~
~~~
//增加一次用户的错误登录次数,两次变为2即可
`pdo_update('users_failed_login', array('count +=' => 1), array('username' => 'mizhou'));`
查询
查询是数据库操作中使用最频繁的操作,有调系统封装了一些函数适用于不同的场景,以下逐个说明
pdo_get
根据条件(AND连接)到指定的表中获取一条记录
$tablename 参数指定要查询的数据表名,此处传入的表名不要使用tablename()函数
$condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件。具体使用查看本章节第二段范围条件操作
$fields 参数指定查询返回的字段列表
`array | boolean pdo_get($tablename, $condition = array(), $fields = array());`
示例:
~~~
//根据uid获取用户的用户名和用户Id信息
//生成的SQL等同于:SELECT username, uid FROM ims_users WHERE uid = '1' LIMIT 1
$user = pdo_get('users', array('uid' => 1), array('username', 'uid'));
//生成的SQL等同于:SELECT username FROM ims_users WHERE username = 'mizhou' AND status = '1' LIMIT 1
$user = pdo_get('users', array('username' => 'mizhou', 'status' => 1), array('username'));
pdo_getcolumn
~~~
根据条件(AND连接)到指定的表中获取一条记录的指定字段
$tablename 参数指定要查询的数据表名,此处传入的表名不要使用tablename()函数
$condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件.。具体使用查看本章节第二段范围条件操作
$field 参数指定查询返回的字段
string | int pdo_getcolumn($tablename, $condition = array(), $field);
示例:
~~~
//根据uid获取用户的用户名
//生成的SQL等同于:SELECT username FROM ims_users WHERE uid = '1' LIMIT 1
$username = pdo_getcolumn('users', array('uid' => 1), 'username');
pdo_getall
~~~
根据条件(AND连接)到指定的表中获取全部记录
$condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件.。具体使用查看本章节第二段范围条件操作
$keyfield 参数传入一个已存在的字段名称,结果数组键值就为该字段,否则为自然排序
其它参数同pdo_get函数
array | boolean pdo_getall($tablename, $condition = array(), $fields = array(), $keyfield = '') {
示例:
~~~
//获取全部启用的用户
//生成的SQL等同于:SELECT * FROM ims_users WHERE status = '1'
$user = pdo_get('users', array('status' => 1));
pdo_getslice
~~~
根据条件(AND连接)到指定的表中获取某个区间的记录,此函数和 pdo_getall 的区别是可以指定limit 值
$condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件.。具体使用查看本章节第二段范围条件操作
$limit 参数指定查询语句的LIMIT值,array(start, end) 或是直接传入范围 2,3
$total 参数指定查询结果的总条数,方便进行分页操作
array | boolean pdo_getslice($tablename, $condition = array(), $limit = array(), &$total = null, $fields = array(), $keyfield = '')
示例:
~~~
$user = pdo_getslice('users', array(), array(0, 10), $total);
echo $total;
pdo_fetch
~~~
根据SQL语句,查询一条记录
$sql 参数指定要返回记录集的SQL语句
$params 参数指定为SQL语句中的参数绑定传值,防止SQL注入
需要注意的是使用参数绑定时,SQL语中等号后不需要使用引号,传入的值必须与绑定的名称一致
array | boolean pdo_fetch($sql, $params = array());
示例:
// :uid 是参数的一个占位符,没有使用引号,传入的第二个参数中要与SQL中的占位名称相同
$user = pdo_fetch("SELECT username, uid FROM ".tablename('users')." WHERE uid = :uid LIMIT 1", array(':uid' => 1));
// LIKE 占位的使用方法
$user = pdo_fetch("SELECT * FROM ".tablename('users')." WHERE username LIKE :username", array(':username' => '%mizhou%'));
pdo_fetchcolumn
根据SQL语句,查询第一条记录的第N列的值,此语句与 pdo_fetch 使用相同,只是此函数返回的不是一个数组而是一个字符串
$column 参数指定返回记录集的第几列数据
string | boolean pdo_fetchcolumn($sql, $params = array(), $column = 0)
示例:
// 获取用户的总数,返回的值是一个数字
$user_total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('users'));
pdo_fetchall
根据SQL语句,查询全部记录,使用方法与pdo_fetch相同
array | boolean pdo_fetchall($sql, $params = array(), $keyfield = '')
示例:
// 需要注意的是,返回的数组的键值为用户的uid
$user = pdo_fetchall("SELECT username, uid FROM ".tablename('users'), array(), 'uid');
变更
以下说明插入,更新,删除操作的几个函数。
pdo_insert
对指定数据表插入一条新记录
$tablename 参数指定要插入记录的数据表名,此处传入的表名不要使用tablename()函数
$data 参数指定要插入的记录,格式为与数据表字段对应的关联数组
$replace 参数指定插入方式使用 INSERT 语句或是 REPLACE 语句(查找到主键相同的数据选择update)
int | boolean pdo_insert($tablename, $data = array(), $replace = false)
示例:
~~~
//添加一条用户记录,并判断是否成功
$user_data = array(
'username' => 'mizhou1',
'status' => '1',
);
$result = pdo_insert('users', $user_data);
if (!empty($result)) {
$uid = pdo_insertid();
message('添加用户成功,UID为' . $uid);
}
pdo_update
~~~
更新指定的数据表的记录
$glue 参数指定前面 $condition 数组条件的关联字 AND 或是 OR
array | boolean pdo_update($tablename, $data = array(), $condition, $glue = 'AND')
示例:
~~~
//更uid等于2的用户的用户名
$user_data = array(
'username' => 'mizhou2',
);
$result = pdo_update('users', $user_data, array('id' => 2));
if (!empty($result)) {
message('更新成功');
}
pdo_delete
~~~
删除指定条件的数据
int | boolean pdo_delete($tablename, $condition = array(), $glue = 'AND')
示例:
~~~
//删除用户名为mizhou2的记录
$result = pdo_delete('users', array('username' => 'mizhou2'));
if (!empty($result)) {
message('删除成功');
~~~
}
运行SQL
当更新,插入,删除无法满足时,可以直接构造SQL语句进行操作
pdo_query
运行一条SQL语句
$params 指定SQL语句中绑定参数的值,参数占位与 pdo_fetch 一致
int | boolean query($sql, $params = array())
示例:
~~~
//更uid等于2的用户的用户名
$result = pdo_query("UPDATE ".tablename('users')." SET username = :username, age = :age WHERE uid = :uid", array(':username' => 'mizhou2', ':age' => 18, ':uid' => 2));
//删除用户名为mizhou2的记录
$result = pdo_query("DELETE FROM ".tablename('users')." WHERE uid = :uid", array(':uid' => 2));
if (!empty($result)) {
message('删除成功');
}
pdo_run
~~~
批量执行SQL语句
$stuff 函数将会将此参数指定的值,替换为当前系统的表前缀。
注:与pdo_query不同的是,pdo_run是可以一次执行多条SQL语句,每条SQL必须以;分隔。
boolean run($sql, $stuff = 'ims_')
示例:
~~~
$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `ims_multisearch` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`weid` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `ims_multisearch_fields` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`reid` int(10) unsigned NOT NULL,
`type` tinyint(1) unsigned NOT NULL DEFAULT '1',
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_reid` (`reid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
EOF;
~~~
pdo_run($sql);
辅助函数
pdo_fieldexists
检查表中是否存在某个字段
$tablename 参数指定要检查的表名称
$fieldname 参数指定要检查是否存在的字段名
boolean pdo_fieldexists($tablename, $fieldname)
示例:
~~~
//如果shopping_goods表中不存在credit字段,则新增credit字段
if(!pdo_fieldexists('shopping_goods', 'credit')) {
pdo_query("ALTER TABLE ".tablename('shopping_goods')." ADD `credit` int(11) NOT NULL DEFAULT '0';");
}
pdo_indexexists
~~~
检查表中是否存在某个索引
$tablename 参数指定要检查的表名称
$indexname 参数指定要检查是否存在的索引名
boolean pdo_indexexists($tablename, $indexname)
示例:
~~~
//如果site_slide表中不存在multiid索引,则新增multiid索引
if (!pdo_indexexists('site_slide', 'multiid')) {
pdo_query("ALTER TABLE ".tablename('site_slide')." ADD INDEX `multiid` (`multiid`);");
}
pdo_tableexists
~~~
检查数据库中是否存在某个表
boolean pdo_tableexists($tablename)
pdo_debug
调试运行SQL语句,显示执行过的SQL的栈情况
$output 参数指定是否直接打印出调试信息
array debug($output = true, $append = array())
示例:
~~~
pdo_debug();
//调用该函数结果如下
Array
(
[0] => Array
(
[sql] => SET NAMES 'utf8';
[error] => Array
(
[0] => 00000
[1] =>
[2] =>
)
)
[1] => Array
(
[sql] => SELECT `value` FROM `ims_core_cache` WHERE `key`=:key
[params] => Array
(
[:key] => setting
)
[error] => Array
(
[0] => 00000
[1] =>
[2] =>
)
)
)
~~~
- 有调使用需知
- 有调商城使用条件
- 有调商城新手快速入门
- 公众平台绑定
- 网页授权获取信息
- 回调域名与JS接口
- 【七牛存储】设置功能说明
- 如何设置商城权限管理
- 【分类层级】功能说明
- 【设置入口】功能说明
- 【会员设置】功能说明
- 【模板消息库】功能说明
- 【消息提醒】功能说明
- 【支付方式】功能说明
- 【商城交易设置】功能说明
- 【商城关闭设置】功能说明
- 【商城关注及分享】功能说明
- 【商城基础设置】功能说明
- 【自定义表单】功能说明
- 【快递助手】功能说明
- 【淘宝助手】功能说明
- 【活动海报】功能说明
- 【超级海报】功能说明
- 【分销样式/文字】功能说明
- 【分销—小店】功能说明
- 分销中心功能说明
- 分销商升级功能说明
- 【分销—结算】功能说明
- 【分销—上下线关系及分销资格】功能说明
- 【分销—基础基本设置】功能说明
- 【分销—入口设置】功能说明
- 分销—排行榜设置功能说明
- 【分销—无效的】功能说明
- 【分销—已打款的】功能说明
- 【分销 —待打款的】功能说明
- 【分销— 待审核的】功能说明
- 【分销—分销商等级】功能说明
- 【分销—分销商增长趋势统计】功能说明
- 【分销—分销商管理】功能说明
- 【数据会员统计】功能说明
- 【数据商品统计】功能说明
- 【数据销售统计】功能说明
- 【财务下载对账单】功能说明
- 【财务提现申请】功能说明
- 【财务充值记录】功能说明
- 【营销—优惠券设置】功能说明
- 【营销—优惠券发放记录】功能说明
- 【营销—优惠券分类】功能说明
- 【营销—优惠券管理】功能说明
- 【营销—充值优惠】功能说明
- 【营销—满额包邮】功能说明
- 【营销—满额立减】功能说明
- 【营销—抵扣设置】功能说明
- 【订单批量发货】功能说明
- 【订单自定义导出】功能说明
- 【订单维权】功能说明
- 【全部订单】功能说明
- 【订单已关闭】功能说明
- 【订单已完成】功能说明
- 【订单待付款】功能说明
- 【订单待收货】功能说明
- 【虚拟卡管理】功能说明
- 【订单待发货】功能说明
- 【订单列表】概述功能说明
- 【会员消息】群发功能说明
- 【会员排行榜】功能说明
- 【会员分组】功能说明
- 【会员等级】功能说明
- 【会员管理】功能说明
- 【商品添加】功能说明
- 【商品管理】功能说明
- 【O2O插件】功能说明
- 【首页管理】功能说明
- 【商城管理】功能说明
- 文章营销】功能说明
- 有调商城常见问题
- 客服消息推送以及模板消息推送的区别
- 快递助手使用手册
- 模板消息行业选择
- 分销中心分销通知设置店长稿
- 微信支付提示:wxpay:faild
- 微信支付提示签名错误解决方法
- 微信支付提示:“URL未注册”
- 有调商城【会员等级】与【分销商等级】的区别
- 微信提示“请在微信客户端内打开”“该链接无法访问"
- 模板消息(高级模式)使用说明
- 新增快速导入批量发货功能
- 关于OAuth2.0授权方式的调整
- 有调商城系统设置
- 商城各入口的设置
- 商品价格为0的修复
- 商城会员等级升级依据和商品分类层级设置
- 系统消息提醒和模板消息库的设置
- 选择开启商城支付方式
- 商城交易设置
- 商城基础、关注分享及关闭设置
- 商城管理
- 商城商品组的使用
- 如何添加虚拟卡?
- 如何设置商品自定义表单
- 如何设置商品线下核销
- 如何设置商品分销
- 如何设置下单通知
- 如何设置购买商品强制关注
- 如何设置商品购买权限
- 如何设置商品详情
- 如何设置商品参数
- 如何设置商品库存/规格
- 如何设置商品基本信息
- 商城—商品管理
- 如何设置商品分类
- o2o插件操作说明
- 商城退货地址管理操作说明
- 商城评价管理操作说明
- 商城配送方式操作说明
- 分销管理
- 佣金的计算方式
- 结算后的佣金怎样打款?
- 如何审核处理申请成为分销商?
- 如何添加分销商等级,设置分销商佣金比例?
- 如何审核分销商的佣金提现申请?
- 如何设置分销商的佣金排名?
- 如何设置成为分销商、新增下线等通知信息?
- 如何设置分销中心的关键词?
- 如何设置分销商层级关系及升级条件?
- 怎样设置分销商获取佣金?
- 如何设置佣金结算方式?
- 如何设置分销商升级等级依据?
- 分销中心佣金明细如何设置查看购买者详情及购买商品详情?
- 如何设置分销商自己的店铺?
- 如何修改商城分销中心的样式/文字?
- 设置手机前台推广二维码
- 区域代理
- 关于区域代理
- 区域代理中心的入口设置
- 成为代理商及发放分红的通知设置
- 商城代理商分红发放流程
- 成为代理商开启分红的基本设置
- 有调商城全网通
- 全网通说明
- 全网通设置详细功能设置
- 逻辑关系说明
- 微官网管理
- 如何建立一个微官网
- 如果添加官网轮播图
- 如何添加栏目以及栏目内容
- 如何增加导航菜单和图标
- 如何增加微官网的自定义菜单
- 微站管理中的其它内容
- 专题页面
- 系统概述技术文档
- 结构概述
- 入口脚本
- 有调MVC
- URL路由&创建
- 全局变量
- 加载器
- 错误处理
- 前端资源
- 目录结构
- 支付流程
- 系统模板技术文档
- 模板标签
- 数据调用
- 常用变量
- 系统数据库技术文档
- 参数绑定
- 数据操作
- 主从配置
- 连接其它数据库
- 微信API技术文档
- 公众号AccessToken
- 共享收货地址