微擎框架的数据操作

作者: 淡蓝海域 分类: php 发布时间: 2018-05-24 09:14
  1. 数据基本操作
  2. 微擎系统数据库操作使用 PDO 兼容方式,以参数绑定的形式进行查询操作。 
  3. 系统已对 PDO 兼容性进行检测及封装。下面具体说明一下数据库的几种基本操作方法。
  4. tablename()
  5. 为了防止微擎系统的表与其它系统命名冲突,安装微擎时均会指定一个表前缀,在写SQL语句时,需要将表名称附加上表前缀。可以使用 tablename() 函数。
  6. $sql = “SELECT * FROM “.tablename(‘users’);
  7. echo $sql;
  8. //输出 SELECT * FROM ims_users
  9. 范围条件操作
  10. 在微擎20160601以后的版本中,增加了pdo_getpdo_getallpdo_getcolumnpdo_getslicepdo_insertpdo_updatepdo_delete的范围条件的支持,具体支持的范围操作符如下:
  11. array(‘>’, ‘<‘, ‘<>’, ‘!=’, ‘>=’, ‘<=’, ‘NOT IN’, ‘not in’, ‘+=’, ‘-=’);
  12. 字段名与操作符组成条件数组的键名,字段名与操作符中间间隔一个空格,具体使用方法如下:
  13. //获取acid大于269的公众号
  14. $account = pdo_get(‘account’, array(‘acid >’ => ‘269’));
  15. //增加一次用户的错误登录次数,两次变为2即可
  16. pdo_update(‘users_failed_login’, array(‘count +=’ => 1), array(‘username’ => ‘mizhou’));
  17. 查询
  18. 查询是数据库操作中使用最频繁的操作,微擎系统封装了一些函数适用于不同的场景,以下逐个说明
  19. pdo_get
  20. 根据条件(AND连接)到指定的表中获取一条记录
  21. $tablename 参数指定要查询的数据表名,此处传入的表名不要使用tablename()函数
  22. $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件。具体使用查看本章节第二段范围条件操作
  23. $fields 参数指定查询返回的字段列表
  24. $limit 参数指定查询表中获取一条记录
  25. array | boolean pdo_get($tablename, $condition = array(), $fields = array());
  26. 示例:
  27. //根据uid获取用户的用户名和用户Id信息
  28. //生成的SQL等同于:SELECT username, uid FROM ims_users WHERE uid = ‘1’ LIMIT 1
  29. $user = pdo_get(‘users’, array(‘uid’ => 1), array(‘username’, ‘uid’));
  30. //生成的SQL等同于:SELECT username FROM ims_users WHERE username = ‘mizhou’ AND status = ‘1’ LIMIT 1
  31. $user = pdo_get(‘users’, array(‘username’ => ‘mizhou’, ‘status’ => 1), array(‘username’));
  32. pdo_getcolumn
  33. 根据条件(AND连接)到指定的表中获取一条记录的指定字段
  34. $tablename 参数指定要查询的数据表名,此处传入的表名不要使用tablename()函数
  35. $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件.。具体使用查看本章节第二段范围条件操作
  36. $field 参数指定查询返回的字段
  37. $limit 参数指定查询表中获取一条记录
  38. string | int pdo_getcolumn($tablename, $condition = array(), $field, $limit=1);
  39. 示例:
  40. //根据uid获取用户的用户名
  41. //生成的SQL等同于:SELECT username FROM ims_users WHERE uid = ‘1’ LIMIT 1
  42. $username = pdo_getcolumn(‘users’, array(‘uid’ => 1), ‘username’,1);
  43. pdo_getall
  44. 根据条件(AND连接)到指定的表中获取全部记录
  45. $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件.。具体使用查看本章节第二段范围条件操作
  46. $keyfield 参数传入一个已存在的字段名称,结果数组键值就为该字段,否则为自然排序
  47. $orderby 参数指定查询结果按哪个字段排序
  48. $limit 参数指定查询语句的LIMIT值,array(start, end) 或是直接传入范围 2,3
  49. 其它参数同pdo_get函数
  50. array | boolean pdo_getall($tablename, $condition = array(), $fields = array(), $keyfield = ,$orderby = array(), $limit = array()) {
  51. 示例:
  52. //获取全部启用的用户
  53. //生成的SQL等同于:SELECT * FROM ims_users WHERE status = ‘1’
  54. $user = pdo_getall(‘users’, array(‘status’ => 1));
  55. //获取从第一条数据开始的10条启用的用户
  56. //生成的SQL等同于:SELECT * FROM ims_users WHERE status =’ 2′ ORDER BY uid,groupid LIMIT 0, 10
  57. $user = pdo_getall(‘users’, array(‘status’ => 1), array() ,  , array(‘uid’,‘groupid’) , array(1,10));
  58. $user1 = pdo_getall(‘users’, array(‘status’ => 1), array() ,  , ‘uid DESC’ , array(1,10));
  59. pdo_getslice
  60. 根据条件(AND连接)到指定的表中获取某个区间的记录,此函数和 pdo_getall 的区别是可以指定limit 
  61. $condition 参数指定查询的条件,以是 AND 连接,支持大于,小于等范围条件.。具体使用查看本章节第二段范围条件操作
  62. $limit 参数指定查询语句的LIMIT值,array(start, end) 或是直接传入范围 2,3
  63. $total 参数指定查询结果的总条数,方便进行分页操作
  64. $orderby 参数指定查询结果按哪个字段排序
  65. array | boolean pdo_getslice($tablename, $condition = array(), $limit = array(), &$total = null, $fields = array(), $keyfield = , $orderby = array())
  66. 示例:
  67. //获取从第一条数据开始的10条启用的用户
  68. //生成的SQL等同于$user = SELECT * FROM  ims_users WHERE status =’2′ ORDER BY uid,groupid LIMIT 0, 10
  69. $user = pdo_getslice(‘users’, array(‘status’ => 2), array(1,10) , $total , array() ,  , array(‘uid’,‘groupid’));
  70. pdo_fetch
  71. 根据SQL语句,查询一条记录
  72. $sql 参数指定要返回记录集的SQL语句
  73. $params 参数指定为SQL语句中的参数绑定传值,防止SQL注入 
  74. 需要注意的是使用参数绑定时,SQL语中等号后不需要使用引号,传入的值必须与绑定的名称一致
  75. array | boolean pdo_fetch($sql, $params = array());
  76. 示例:
  77. // :uid 是参数的一个占位符,没有使用引号,传入的第二个参数中要与SQL中的占位名称相同
  78. $user = pdo_fetch(“SELECT username, uid FROM “.tablename(‘users’).” WHERE uid = :uid LIMIT 1″, array(‘:uid’ => 1));
  79. // LIKE 占位的使用方法
  80. $user = pdo_fetch(“SELECT * FROM “.tablename(‘users’).” WHERE username LIKE :username”, array(‘:username’ => ‘%mizhou%’));
  81. pdo_fetchcolumn
  82. 根据SQL语句,查询第一条记录的第N列的值,此语句与 pdo_fetch 使用相同,只是此函数返回的不是一个数组而是一个字符串
  83. $column 参数指定返回记录集的第几列数据
  84. string | boolean pdo_fetchcolumn($sql, $params = array(), $column = 0)
  85. 示例:
  86. // 获取用户的总数,返回的值是一个数字 
  87. $user_total = pdo_fetchcolumn(“SELECT COUNT(*) FROM “.tablename(‘users’));
  88. pdo_fetchall
  89. 根据SQL语句,查询全部记录,使用方法与pdo_fetch相同
  90. array | boolean pdo_fetchall($sql, $params = array(), $keyfield = )
  91. 示例:
  92. // 需要注意的是,返回的数组的键值为用户的uid
  93. $user = pdo_fetchall(“SELECT username, uid FROM “.tablename(‘users’), array(), ‘uid’);
  94. 变更
  95. 以下说明插入,更新,删除操作的几个函数。
  96. pdo_insert
  97. 对指定数据表插入一条新记录
  98. $tablename 参数指定要插入记录的数据表名,此处传入的表名不要使用tablename()函数
  99. $data 参数指定要插入的记录,格式为与数据表字段对应的关联数组
  100. $replace 参数指定插入方式使用 INSERT 语句或是 REPLACE 语句(查找到主键相同的数据选择update)
  101. int | boolean pdo_insert($tablename, $data = array(), $replace = false)
  102. 示例:
  103. //添加一条用户记录,并判断是否成功
  104. $user_data = array(
  105.     ‘username’ => ‘mizhou1’,
  106.     ‘status’ => ‘1’,
  107. );
  108. $result = pdo_insert(‘users’, $user_data);
  109. if (!empty($result)) {
  110.     $uid = pdo_insertid();
  111.     message(‘添加用户成功,UID为’ . $uid);
  112. }
  113. pdo_update
  114. 更新指定的数据表的记录
  115. $glue 参数指定前面 $condition 数组条件的关联字 AND 或是 OR
  116. array | boolean pdo_update($tablename, $data = array(), $condition, $glue = ‘AND’)
  117. 示例:
  118. //更uid等于2的用户的用户名
  119. $user_data = array(
  120.     ‘username’ => ‘mizhou2’,
  121. );
  122. $result = pdo_update(‘users’, $user_data, array(‘id’ => 2));
  123. if (!empty($result)) {
  124.     message(‘更新成功’);
  125. }
  126. pdo_delete
  127. 删除指定条件的数据
  128. int | boolean pdo_delete($tablename, $condition = array(), $glue = ‘AND’)
  129. 示例:
  130. //删除用户名为mizhou2的记录
  131. $result = pdo_delete(‘users’, array(‘username’ => ‘mizhou2’));
  132. if (!empty($result)) {
  133.     message(‘删除成功’);
  134. }
  135. 运行SQL
  136. 当更新,插入,删除无法满足时,可以直接构造SQL语句进行操作
  137. pdo_query
  138. 运行一条SQL语句
  139. $params 指定SQL语句中绑定参数的值,参数占位与 pdo_fetch 一致
  140. int | boolean query($sql, $params = array())
  141. 示例:
  142. //更uid等于2的用户的用户名
  143. $result = pdo_query(“UPDATE “.tablename(‘users’).” SET username = :username, age = :age WHERE uid = :uid”, array(‘:username’ => ‘mizhou2’, ‘:age’ => 18, ‘:uid’ => 2));
  144. //删除用户名为mizhou2的记录
  145. $result = pdo_query(“DELETE FROM “.tablename(‘users’).” WHERE uid = :uid”, array(‘:uid’ => 2));
  146. if (!empty($result)) {
  147.     message(‘删除成功’);
  148. }
  149. pdo_run
  150. 批量执行SQL语句
  151. $stuff 函数将会将此参数指定的值,替换为当前系统的表前缀。
  152. 注:与pdo_query不同的是,pdo_run是可以一次执行多条SQL语句,每条SQL必须以;分隔。
  153. boolean run($sql, $stuff = ‘ims_’)
  154. 示例:
  155. $sql = <<<EOF
  156. CREATE TABLE IF NOT EXISTS `ims_multisearch` (
  157.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  158.   `weid` int(10) unsigned NOT NULL,
  159.   PRIMARY KEY (`id`)
  160. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
  161. CREATE TABLE IF NOT EXISTS `ims_multisearch_fields` (
  162.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  163.   `reid` int(10) unsigned NOT NULL,
  164.   `type` tinyint(1) unsigned NOT NULL DEFAULT ‘1’,
  165.   `title` varchar(255) NOT NULL,
  166.   PRIMARY KEY (`id`),
  167.   KEY `idx_reid` (`reid`)
  168. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
  169. EOF;
  170. pdo_run($sql);
  171. 辅助函数
  172. pdo_fieldexists
  173. 检查表中是否存在某个字段
  174. $tablename 参数指定要检查的表名称
  175. $fieldname 参数指定要检查是否存在的字段名
  176. boolean pdo_fieldexists($tablename, $fieldname)
  177. 示例:
  178. //如果shopping_goods表中不存在credit字段,则新增credit字段
  179. if(!pdo_fieldexists(‘shopping_goods’, ‘credit’)) {
  180.     pdo_query(“ALTER TABLE “.tablename(‘shopping_goods’).” ADD `credit` int(11) NOT NULL DEFAULT ‘0’;”);
  181. }
  182. pdo_indexexists
  183. 检查表中是否存在某个索引
  184. $tablename 参数指定要检查的表名称
  185. $indexname 参数指定要检查是否存在的索引名
  186. boolean pdo_indexexists($tablename, $indexname)
  187. 示例:
  188. //如果site_slide表中不存在multiid索引,则新增multiid索引
  189. if (!pdo_indexexists(‘site_slide’, ‘multiid’)) {
  190.     pdo_query(“ALTER TABLE “.tablename(‘site_slide’).” ADD INDEX `multiid` (`multiid`);”);
  191. }
  192. pdo_tableexists
  193. 检查数据库中是否存在某个表
  194. boolean pdo_tableexists($tablename)
  195. pdo_debug
  196. 调试运行SQL语句,显示执行过的SQL的栈情况
  197. $output 参数指定是否直接打印出调试信息
  198. array debug($output = true, $append = array())
  199. 示例:
  200. pdo_debug();
  201. //调用该函数结果如下
  202. Array
  203. (
  204. [0] => Array
  205.     (
  206.         [sql] => SET NAMES ‘utf8’;
  207.         [error] => Array
  208.             (
  209.                 [0] => 00000
  210.                 [1] => 
  211.                 [2] => 
  212.             )
  213.     )
  214. [1] => Array
  215.     (
  216.         [sql] => SELECT `value` FROM `ims_core_cache` WHERE `key`=:key
  217.         [params] => Array
  218.             (
  219.                 [:key] => setting
  220.             )
  221.         [error] => Array
  222.             (
  223.                 [0] => 00000
  224.                 [1] => 
  225.                 [2] => 
  226.             )
  227.     )
  228. )

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!