数据库函数
本文整理于网络,仅供阅读参考,如有不妥之处,敬请批评指正!如果您想加入微擎社区版技术大牛微信群和QQ群,请联系微信: ccccyyyy4444 或者 QQ:155120699
各pdo_xxx功能列表
查询
- pdo_get
- pdo_getcolumn
- pdo_getall
- pdo_getslice
- pdo_fetch
- pdo_fetchcolumn
- pdo_fetchall
变更
- pdo_insert
- pdo_update
- pdo_delete
运行SQL
- pdo_query
- pdo_run
辅助函数
- pdo_exists
- pdo_fieldexists
- pdo_indexexists
- pdo_tableexists
- pdo_fieldmatch
- pdo_insertid
- pdo_fetchallfields
- pdo_debug
pdo_get()
根据条件(AND连接)到指定的表中获取一条记录
说明
array | boolean pdo_get($tablename, $condition = array(), $fields = array());
参数
- $tablename 参数指定要查询的数据表名,此处传入的表名不要使用
tablename()
函数 - $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围查询
- $fields 参数指定查询返回的字段列表
示例
//根据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 like '%mizhou%' AND status = '1' LIMIT 1
$user = pdo_get('users', array('username like' => 'mizhou', 'status' => 1), array('username'));
pdo_getcolumn()
根据条件(AND连接)到指定的表中获取一条记录的指定字段
说明
string | int pdo_getcolumn($tablename, $condition = array(), $field);
参数
- $tablename 参数指定要查询的数据表名,此处传入的表名不要使用
tablename()
函数 - $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围查询
- $field 要获取的字段名称
示例
//根据uid获取用户的用户名
//生成的SQL等同于:SELECT username FROM ims_users WHERE uid = '1' LIMIT 1
$username = pdo_getcolumn('users', array('uid' => 1), 'username');
pdo_getall()
根据条件(AND连接)到指定的表中获取全部记录
说明
array | boolean pdo_getall($tablename, $condition = array(), $fields = array(), $keyfield = '', $orderby = array(), $limit = array());
参数
- $keyfield 参数传入一个已存在的字段名称,结果数组键值就为该字段,否则为自然排序
- $orderby 按xxx升/降排序
- $limit 分页,array(当前页, 每页条页)
- 其它参数同
pdo_get
函数
示例
//获取全部启用的用户
//生成的SQL等同于:SELECT `username`,`uid` FROM `ims_users` WHERE `status` = 2 ORDER BY `starttime` desc,`endtime` desc LIMIT 0, 5
$user = pdo_getall('users', array('status' => 2), array('username', 'uid'), 'uid', array('starttime desc', 'endtime desc'), array(1,5));
pdo_getslice()
根据条件(AND连接)到指定的表中获取某个区间的记录
说明
array | boolean pdo_getslice($tablename, $condition = array(), $limit = array(), &$total = null, $fields = array(), $keyfield = '', $orderby = array());
参数
- $limit 参数指定查询语句的LIMIT值,array(start, end) 或是直接传入范围 2,3
- $total 参数指定查询结果的总条数,方便进行分页操作
- 其它参数同
pdo_get
、pdo_getall
函数
示例
$user = pdo_getslice('users', array(), array(0, 10), $total, array('username', 'uid'), 'uid', array('starttime desc', 'endtime desc'));
echo $total;
pdo_fetch()
根据SQL语句,查询一条记录
说明
array | boolean pdo_fetch($sql, $params = array());
参数
- $sql 参数指定要返回记录集的SQL语句
- $params 参数指定为SQL语句中的参数绑定传值,防止SQL注入
需要注意的是使用参数绑定时,SQL语中等号后不需要使用引号,传入的值必须与绑定的名称一致
示例
// :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 使用相同,只是此函数返回的不是一个数组而是一个字符串
说明
string | boolean pdo_fetchcolumn($sql, $params = array(), $column = 0);
参数
- $sql 参数指定要返回记录集的SQL语句
- $params 参数指定为SQL语句中的参数绑定传值,防止SQL注入
需要注意的是使用参数绑定时,SQL语句中等号后不需要使用引号,传入的值必须与绑定的名称一致 - $column 参数指定返回记录集的第几列数据
示例
// 获取用户的总数,返回的值是一个数字
$user_total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('users'));
pdo_fetchall()
根据SQL语句,查询全部记录,使用方法与pdo_fetch相同
说明
array | boolean pdo_fetchall($sql, $params = array(), $keyfield = '');
参数
- $sql 参数指定要返回记录集的SQL语句
- $params 参数指定为SQL语句中的参数绑定传值,防止SQL注入
需要注意的是使用参数绑定时,SQL语中等号后不需要使用引号,传入的值必须与绑定的名称一致 - $keyfield 参数传入一个已存在的字段名称,结果数组键值就为该字段,否则为自然排序
示例
// 需要注意的是,返回的数组的键值为用户的uid
$user = pdo_fetchall("SELECT username, uid FROM ".tablename('users'), array(), 'uid');
pdo_insert()
对指定数据表插入一条新记录
说明
int | boolean pdo_insert($tablename, $data = array(), $replace = false);
参数
- $tablename 参数指定要插入记录的数据表名,此处传入的表名不要使用tablename()函数
- $data 参数指定要插入的记录,格式为与数据表字段对应的关联数组
- $replace 参数指定插入方式使用 INSERT 语句或是 REPLACE 语句(查找到主键相同的数据选择update)
示例
//添加一条用户记录,并判断是否成功
$user_data = array(
'username' => 'mizhou1',
'status' => '1',
);
$result = pdo_insert('users', $user_data);
if (!empty($result)) {
$uid = pdo_insertid();
message('添加用户成功,UID为' . $uid);
}
pdo_update()
更新指定的数据表的记录
说明
array | boolean pdo_update($tablename, $data = array(), $condition, $glue = 'AND')
参数
- $tablename 参数指定要插入记录的数据表名,此处传入的表名不要使用tablename()函数
- $data 参数指定要插入的记录,格式为与数据表字段对应的关联数组
- $condition 参数指定要更新的前提条件
- $glue 参数指定前面 $condition 数组条件的关联字 AND 或是 OR
示例
//更uid等于2的用户的用户名
$user_data = array(
'username' => 'mizhou2',
);
$result = pdo_update('users', $user_data, array('uid' => 2));
if (!empty($result)) {
message('更新成功');
}
pdo_delete()
删除指定条件的数据
说明
int | boolean pdo_delete($tablename, $condition = array(), $glue = 'AND')
参数
- $tablename 参数指定要插入记录的数据表名,此处传入的表名不要使用tablename()函数
- $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围查询
- $glue 参数指定前面 $condition 数组条件的关联字 AND 或是 OR
示例
//删除用户名为mizhou2的记录
$result = pdo_delete('users', array('username' => 'mizhou2'));
if (!empty($result)) {
message('删除成功');
}
pdo_query()
执行一条非查询语句
说明
int | boolean pdo_query($sql, $params = array())
参数
- $params 指定SQL语句中绑定参数的值,参数占位与 pdo_fetch 一致
示例
//更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语句
说明
boolean pdo_run($sql, $stuff = 'ims_')
参数
- $stuff 函数将会将此参数指定的值,替换为当前系统的表前缀。
注:与pdo_query
不同的是,pdo_run
是可以一次执行多条SQL语句,每条SQL必须以;分隔。
示例
$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_exists()
返回满足条件的记录是否存在
说明
boolean pdo_exists($tablename, $condition = array())
参数
- $tablename 表名
- $condition 满足的条件
示例
//是否存在服务号,对应sql:SELECT * FROM `ims_account` WHERE `type` = 4 LIMIT 1
var_dump(pdo_exists('account', array('type' => ACCOUNT_SERVICE_VERIFY)));
pdo_fieldexists()
检查表中是否存在某个字段
说明
boolean pdo_fieldexists($tablename, $fieldname)
参数
- $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()
检查表中是否存在某个索引
说明
boolean pdo_indexexists($tablename, $indexname)
参数
- $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)
参数
- $tablename 参数指定要检查的表名称
示例
if (!pdo_tableexists('site_slide')) {
echo '表不存在';
}
pdo_fieldmatch()
检查某个表中的字段类型是不是符合
说明
boolean pdo_fieldmatch($tablename, $fieldname, $datatype = '', $length = '')
参数
- $tablename 要检查的表名
- $fieldname 要检测的字段名
- $datatype 检测该字段是不是与此值相符
- $length 检测该字段长度是不是与此值相符
示例
pdo_fieldmatch('users', 'uid', 'varchar'); // 类型不符合,返回 -1
pdo_fieldmatch('users', 'uid', 'int'); // 类型符合,返回 true
pdo_fieldmatch('users', 'uid', 'int', 5); // 长度不符合,返回 -1
pdo_insertid()
获取上一步 INSERT 操作产生的 ID.
说明
int pdo_insertid()
参数
无
示例
pdo_insert('uni_account', array('name' => 'test', 'description' => 'test'));
$result = pdo_insertid();
pdo_fetchallfields()
获取所有字段名称
说明
array pdo_fetchallfields($tablename)
参数
- $tablename 表名
示例
var_dump(pdo_fetchallfields('ims_account'));
pdo_debug()
调试运行SQL语句,显示执行过的SQL的栈情况
说明
array pdo_debug($output = true, $append = array())
参数
- $output 是否要输出执行记录和执行错误信息
- $append 加入执行信息,如果此参数不为空则 $output 参数为 false
示例
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] =>
)
)
)
如果看不懂微擎社区版二次开发手册或者遇到问题,请联系微信: ccccyyyy4444 或者 QQ:155120699 ,如果我们有空闲时间,可以免费为您答疑解惑。