博客列表 >11月27日_pdo方法库封装为Db类使用 - 九期线上班

11月27日_pdo方法库封装为Db类使用 - 九期线上班

木易
木易原创
2019年12月16日 10:21:48771浏览

1. 把 php公用方法库中的 数据库操作函数, 重写到 Db类中。

  1. <?php
  2. //PDO类封装
  3. class MyDB
  4. {
  5. // 连接参数
  6. public $dsn;
  7. public $user;
  8. public $password;
  9. // 连接属性
  10. public $pdo;
  11. // 连接方法
  12. public function connect()
  13. {
  14. $this->pdo = new PDO($this->dsn, $this->user, $this->password);
  15. }
  16. // 实例化后自动连接数据库
  17. public function __construct($dsn, $user, $password)
  18. {
  19. $this->dsn = $dsn;
  20. $this->user = $user;
  21. $this->password = $password;
  22. // 调用对象方法,实现自动连接
  23. $this->connect();
  24. }
  25. //查询多条记录
  26. public function select($table, $fields, $where = '', $order = '', $limit = '')
  27. {
  28. //拼接sql
  29. $sql = 'SELECT';
  30. if (is_array($fields)) {
  31. foreach ($fields as $field) {
  32. $sql .= $field . ',';
  33. }
  34. } else {
  35. $sql .= $fields;
  36. }
  37. $sql = rtrim(trim($sql), ',');
  38. $sql .= 'FROM' . $table;
  39. // 查询条件
  40. if (!empty($where)) {
  41. $sql .= 'WHERE' . $where;
  42. }
  43. // 排序条件
  44. if (!empty($order)) {
  45. $sql .= 'order by' . $order;
  46. }
  47. // 分页条件
  48. if (!empty($limit)) {
  49. $sql .= 'limit' . $limit;
  50. }
  51. $sql .= ';';
  52. // 创建PDO预处理对象
  53. $stmt = $this->pdo->prepare($sql);
  54. // 执行查询操作
  55. if ($stmt->execute()) {
  56. if ($stmt->rowCount() > 0) {
  57. $stmt->setFetchMode(PDO::FETCH_ASSOC);
  58. // 返回一个二维数组
  59. return $stmt->fetchAll();
  60. }
  61. } else {
  62. return false;
  63. }
  64. }
  65. // 查询单条记录
  66. public function find($table, $fields, $where = '')
  67. {
  68. $pdo = $this->pdo;
  69. // 创建sql语句
  70. $sql = 'SELECT';
  71. if (is_array($fields)) {
  72. foreach ($fields as $field) {
  73. $sql .= $field . ',';
  74. }
  75. }else{
  76. $sql.=$fields;
  77. }
  78. $sql = rtrim(trim($sql), ',');
  79. $sql .= 'FROM' . $table;
  80. // 查询条件
  81. if (!empty($where)) {
  82. $sql .= 'WHERE' . $where;
  83. }
  84. $sql .= 'LIMIT 1;';
  85. // 创建PDO预处理对象
  86. $stmt = $pdo->prepare($sql);
  87. // 执行查询操作
  88. if ($stmt->execute()) {
  89. if ($stmt->rowCount() > 0) {
  90. $stmt->setFetchMode(PDO::FETCH_ASSOC);
  91. return $stmt->fetch();
  92. }
  93. } else {
  94. return false;
  95. }
  96. }
  97. //添加数据
  98. public function add($table, $data = [])
  99. {
  100. // 创建sql语句
  101. $sql = "INSERT INTO {$table} SET";
  102. // 组装插入语句
  103. if (is_array($data)) {
  104. foreach ($data as $k => $v) {
  105. $sql .= $k . '="' . $v . '",';
  106. }
  107. } else {
  108. return false;
  109. }
  110. //去掉尾部逗号,并添加分号结束
  111. $sql = rtrim(trim($sql), ',') . ';';
  112. // 创建PDO预处理对象
  113. $stmt = $this->pdo->prepare($sql);
  114. // 执行新增操作
  115. if ($stmt->execute()) {
  116. if ($stmt->rowCount() > 0) {
  117. return true;
  118. }
  119. } else {
  120. return false;
  121. }
  122. }
  123. // 更新数据
  124. public function update($table, $data = [], $where = '')
  125. {
  126. // 创建sql语句
  127. $sql = "UPDATE{$table}SET";
  128. // 组装修改语句
  129. if (is_array($data)) {
  130. foreach ($data as $k => $v) {
  131. $sql .= $k . '="' . $v . '",';
  132. }
  133. }
  134. // 去掉尾部逗号,并添加分号结束
  135. $sql = rtrim(trim($sql), ',');
  136. // 查询条件
  137. if (!empty($where)) {
  138. $sql .= 'WHERE' . $where;
  139. }
  140. // 创建PDO预处理对象
  141. $stmt = $this->pdo->prepare($sql);
  142. // 执行新增操作
  143. if ($stmt->execute()) {
  144. if ($stmt->rowCount() > 0) {
  145. return true;
  146. }
  147. } else {
  148. return false;
  149. }
  150. }
  151. // 删除记录
  152. public function real_delete($table, $where = '')
  153. {
  154. // 创建sql语句
  155. $sql = 'DELETE FROM {$table}';
  156. // 查询语句
  157. if (!empty($where)) {
  158. $sql .= 'WHERE' . $where;
  159. }
  160. // 创建pdo预处理对象
  161. $stmt = $this->pdo->prepare($sql);
  162. // 执行删除操作
  163. if ($stmt->execute()) {
  164. if ($stmt->rowCount() > 0) {
  165. return true;
  166. }
  167. } else {
  168. return false;
  169. }
  170. }
  171. // 统计数量
  172. public function count_num($table, $where = '')
  173. {
  174. // 创建sql语句
  175. $sql = 'SELECT count(*) as count_number FROM' . $table;
  176. //查询条件
  177. if (!empty($where)) {
  178. $sql .= 'WHERE' . $where;
  179. }
  180. // 创建sql预处理对象
  181. $stmt=$this->pdo->prepare($sql);
  182. // 执行查询操作
  183. if($stmt->execute()){
  184. if($stmt->rowCount()>0){
  185. $row =$stmt->fetch(PDO::FETCH_ASSOC);
  186. $rows= $row['count_number'];
  187. return $rows;
  188. }
  189. }else{
  190. return false;
  191. }
  192. }
  193. // 析构方法
  194. public function __destruct()
  195. {
  196. $this->pdo =null;
  197. }
  198. }
  199. //实例化
  200. $db =new MyDB('mysql:host=localhost;dbname=ou','root','root');
  201. if($db->pdo){
  202. echo '<h2>连接成功</h2>';
  203. }
  204. echo '<h3>查询多条:</h3>';
  205. $res =$db->select('user','username');
  206. echo '<pre>';
  207. print_r($res);
  208. echo '<hr>';
  209. echo '<h3>查询一条</h3>';
  210. $res =$db->find('user','username','uid=1');
  211. print_r($res);
  212. echo '<hr>';
  213. echo '<h3>添加数据</h3>';
  214. $data=[
  215. 'username'=>'xiaohong',
  216. 'password'=>'123456',
  217. ];
  218. $insert =$db->add('user',$data);
  219. var_dump($insert);
  220. echo '<hr>';
  221. echo '<h3>更新数据:</h3>';
  222. $data = [
  223. 'password' => '111111',
  224. ]; //这里密码的值不改,还是原来123456 居然执行结果会报null
  225. $update = $db->update('user',$data,'uid=3');
  226. var_dump($update);
  227. echo '<hr>';
  228. echo '<h3>删除数据:</h3>';
  229. $delete = $db->real_delete('user','uid=3');
  230. var_dump($delete);
  231. echo '<hr>';
  232. echo '<h3>统计:</h3>';
  233. $count = $db->count_num('user');
  234. echo $count;
  235. echo '<pre>';

结果是失败的,但是数据库又连接进去了,自己研究失败希望能得到解答。

数据库情况

个人感悟:自己还有很多不足需要花更多时间学习,继续加油。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
木易2019-12-16 10:23:221楼
老师抱歉,提交作业的时候没核对md语法,重新进行提交了一次