当前位置:Gxlcms > PHP教程 > PDO数据库操作类

PDO数据库操作类

时间:2021-07-01 10:21:17 帮助过:37人阅读

  1. class HRDB{
  2. protected $pdo;
  3. protected $res;
  4. protected $config;
  5. /*构造函数*/
  6. function __construct($config){
  7. $this->Config = $config;
  8. $this->connect();
  9. }
  10. /*数据库连接*/
  11. public function connect(){
  12. $this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password']);
  13. $this->pdo->query('set names utf8;');
  14. //把结果序列化成stdClass
  15. //$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
  16. //自己写代码捕获Exception
  17. $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  18. }
  19. /*数据库关闭*/
  20. public function close(){
  21. $this->pdo = null;
  22. }
  23. public function query($sql){
  24. $res = $this->pdo->query($sql);
  25. if($res){
  26. $this->res = $res;
  27. }
  28. }
  29. public function exec($sql){
  30. $res = $this->pdo->exec($sql);
  31. if($res){
  32. $this->res = $res;
  33. }
  34. }
  35. public function fetchAll(){
  36. return $this->res->fetchAll();
  37. }
  38. public function fetch(){
  39. return $this->res->fetch();
  40. }
  41. public function fetchColumn(){
  42. return $this->res->fetchColumn();
  43. }
  44. public function lastInsertId(){
  45. return $this->res->lastInsertId();
  46. }
  47. /**
  48. * 参数说明
  49. * int $debug 是否开启调试,开启则输出sql语句
  50. * 0 不开启
  51. * 1 开启
  52. * 2 开启并终止程序
  53. * int $mode 返回类型
  54. * 0 返回多条记录
  55. * 1 返回单条记录
  56. * 2 返回行数
  57. * string/array $table 数据库表,两种传值模式
  58. * 普通模式:
  59. * 'tb_member, tb_money'
  60. * 数组模式:
  61. * array('tb_member', 'tb_money')
  62. * string/array $fields 需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式
  63. * 普通模式:
  64. * 'username, password'
  65. * 数组模式:
  66. * array('username', 'password')
  67. * string/array $sqlwhere 查询条件,允许为空,两种传值模式
  68. * 普通模式:
  69. * 'and type = 1 and username like "%os%"'
  70. * 数组模式:
  71. * array('type = 1', 'username like "%os%"')
  72. * string $orderby 排序,默认为id倒序
  73. */
  74. public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="tbid desc"){
  75. //参数处理
  76. if(is_array($table)){
  77. $table = implode(', ', $table);
  78. }
  79. if(is_array($fields)){
  80. $fields = implode(', ', $fields);
  81. }
  82. if(is_array($sqlwhere)){
  83. $sqlwhere = ' and '.implode(' and ', $sqlwhere);
  84. }
  85. //数据库操作
  86. if($debug === 0){
  87. if($mode === 2){
  88. $this->query("select count(tbid) from $table where 1=1 $sqlwhere");
  89. $return = $this->fetchColumn();
  90. }else if($mode === 1){
  91. $this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
  92. $return = $this->fetch();
  93. }else{
  94. $this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
  95. $return = $this->fetchAll();
  96. }
  97. return $return;
  98. }else{
  99. if($mode === 2){
  100. echo "select count(tbid) from $table where 1=1 $sqlwhere";
  101. }else if($mode === 1){
  102. echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
  103. }
  104. else{
  105. echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
  106. }
  107. if($debug === 2){
  108. exit;
  109. }
  110. }
  111. }
  112. /**
  113. * 参数说明
  114. * int $debug 是否开启调试,开启则输出sql语句
  115. * 0 不开启
  116. * 1 开启
  117. * 2 开启并终止程序
  118. * int $mode 返回类型
  119. * 0 无返回信息
  120. * 1 返回执行条目数
  121. * 2 返回最后一次插入记录的id
  122. * string/array $table 数据库表,两种传值模式
  123. * 普通模式:
  124. * 'tb_member, tb_money'
  125. * 数组模式:
  126. * array('tb_member', 'tb_money')
  127. * string/array $set 需要插入的字段及内容,两种传值模式
  128. * 普通模式:
  129. * 'username = "test", type = 1, dt = now()'
  130. * 数组模式:
  131. * array('username = "test"', 'type = 1', 'dt = now()')
  132. */
  133. public function insert($debug, $mode, $table, $set){
  134. //参数处理
  135. if(is_array($table)){
  136. $table = implode(', ', $table);
  137. }
  138. if(is_array($set)){
  139. $set = implode(', ', $set);
  140. }
  141. //数据库操作
  142. if($debug === 0){
  143. if($mode === 2){
  144. $this->query("insert into $table set $set");
  145. $return = $this->lastInsertId();
  146. }else if($mode === 1){
  147. $this->exec("insert into $table set $set");
  148. $return = $this->res;
  149. }else{
  150. $this->query("insert into $table set $set");
  151. $return = NULL;
  152. }
  153. return $return;
  154. }else{
  155. echo "insert into $table set $set";
  156. if($debug === 2){
  157. exit;
  158. }
  159. }
  160. }
  161. /**
  162. * 参数说明
  163. * int $debug 是否开启调试,开启则输出sql语句
  164. * 0 不开启
  165. * 1 开启
  166. * 2 开启并终止程序
  167. * int $mode 返回类型
  168. * 0 无返回信息
  169. * 1 返回执行条目数
  170. * string $table 数据库表,两种传值模式
  171. * 普通模式:
  172. * 'tb_member, tb_money'
  173. * 数组模式:
  174. * array('tb_member', 'tb_money')
  175. * string/array $set 需要更新的字段及内容,两种传值模式
  176. * 普通模式:
  177. * 'username = "test", type = 1, dt = now()'
  178. * 数组模式:
  179. * array('username = "test"', 'type = 1', 'dt = now()')
  180. * string/array $sqlwhere 修改条件,允许为空,两种传值模式
  181. * 普通模式:
  182. * 'and type = 1 and username like "%os%"'
  183. * 数组模式:
  184. * array('type = 1', 'username like "%os%"')
  185. */
  186. public function update($debug, $mode, $table, $set, $sqlwhere=""){
  187. //参数处理
  188. if(is_array($table)){
  189. $table = implode(', ', $table);
  190. }
  191. if(is_array($set)){
  192. $set = implode(', ', $set);
  193. }
  194. if(is_array($sqlwhere)){
  195. $sqlwhere = ' and '.implode(' and ', $sqlwhere);
  196. }
  197. //数据库操作
  198. if($debug === 0){
  199. if($mode === 1){
  200. $this->exec("update $table set $set where 1=1 $sqlwhere");
  201. $return = $this->res;
  202. }else{
  203. $this->query("update $table set $set where 1=1 $sqlwhere");
  204. $return = NULL;
  205. }
  206. return $return;
  207. }else{
  208. echo "update $table set $set where 1=1 $sqlwhere";
  209. if($debug === 2){
  210. exit;
  211. }
  212. }
  213. }
  214. /**
  215. * 参数说明
  216. * int $debug 是否开启调试,开启则输出sql语句
  217. * 0 不开启
  218. * 1 开启
  219. * 2 开启并终止程序
  220. * int $mode 返回类型
  221. * 0 无返回信息
  222. * 1 返回执行条目数
  223. * string $table 数据库表
  224. * string/array $sqlwhere 删除条件,允许为空,两种传值模式
  225. * 普通模式:
  226. * 'and type = 1 and username like "%os%"'
  227. * 数组模式:
  228. * array('type = 1', 'username like "%os%"')
  229. */
  230. public function delete($debug, $mode, $table, $sqlwhere=""){
  231. //参数处理
  232. if(is_array($sqlwhere)){
  233. $sqlwhere = ' and '.implode(' and ', $sqlwhere);
  234. }
  235. //数据库操作
  236. if($debug === 0){
  237. if($mode === 1){
  238. $this->exec("delete from $table where 1=1 $sqlwhere");
  239. $return = $this->res;
  240. }else{
  241. $this->query("delete from $table where 1=1 $sqlwhere");
  242. $return = NULL;
  243. }
  244. return $return;
  245. }else{
  246. echo "delete from $table where 1=1 $sqlwhere";
  247. if($debug === 2){
  248. exit;
  249. }
  250. }
  251. }
  252. }

PDO

人气教程排行