PDO的mysql数据库操作类

dbconfig类负责配置数据库访问信息,包括:服务器地址、端口、数据库实例名、用户名、用户密码、字符集等.

dbtemplate类集合了对数据库的访问操作,主要有以下几个操作:

1. queryrows:返回多行记录

2. queryrow:返回为单条记录

3. queryforint:查询单字段,返回整数

4. queryforfloat:查询单字段,返回浮点数(float)

5. queryfordouble:查询单字段,返回浮点数(double)

6. queryforobject:查询单字段,返回对象,实际类型有数据库决定

7. update : 执行一条更新语句. insert / upadate / delete

  1. class dbconfig {
  2. private static $dbms = "mysql";
  3. private static $host = '127.0.0.1';
  4. private static $port = '3306';
  5. private static $username = '';
  6. private static $password = '';
  7. private static $dbname = '';
  8. private static $charset = 'utf-8';
  9. private static $dsn;
  10. /**
  11. *
  12. * @return 返回pdo dsn配置
  13. */
  14. public static function getdsn() {
  15. if (!isset(self::$dsn)) {
  16. self::$dsn = self::$dbms . ':host=' . self::$host . ';port=' .
  17. self::$port . ';dbname=' . self::$dbname;
  18. if (strlen(self::$charset) > 0) {
  19. self::$dsn = self::$dsn . ';charset=' . self::$charset;
  20. }
  21. }
  22. return self::$dsn;
  23. }
  24. /**
  25. * 设置mysql数据库服务器主机
  26. * @param $host 主机的ip地址
  27. */
  28. public static function sethost($host) {
  29. if (isset($host) && strlen($host) > 0)
  30. self::$host = trim($host);
  31. }
  32. /**
  33. * 设置mysql数据库服务器的端口
  34. * @param $port 端口
  35. */
  36. public static function setport($port) {
  37. if (isset($port) && strlen($port) > 0)
  38. self::$port = trim($port);
  39. }
  40. /**
  41. * 设置mysql数据库服务器的登陆用户名
  42. * @param $username
  43. */
  44. public static function setusername($username) {
  45. if (isset($username) && strlen($username) > 0)
  46. self::$username = $username;
  47. }
  48. /**
  49. * 设置mysql数据库服务器的登陆密码
  50. * @param $password
  51. */
  52. public static function setpassword($password) {
  53. if (isset($password) && strlen($password) > 0)
  54. self::$password = $password;
  55. }
  56. /**
  57. * 设置mysql数据库服务器的数据库实例名
  58. * @param $dbname 数据库实例名
  59. */
  60. public static function setdbname($dbname) {
  61. if (isset($dbname) && strlen($dbname) > 0)
  62. self::$dbname = $dbname;
  63. }
  64. /**
  65. * 设置数据库编码
  66. * @param $charset
  67. */
  68. public static function setcharset($charset) {
  69. if (isset($charset) && strlen($charset) > 0)
  70. self::$charset = $charset;
  71. }
  72. }
  73. /**
  74. * 一个数据库操作工具类
  75. *
  76. * @author zhjiun@gmail.com
  77. */
  78. class dbtemplate {
  79. /**
  80. * 返回多行记录
  81. * @param $sql
  82. * @param $parameters
  83. * @return 记录数据
  84. */
  85. public function queryrows($sql, $parameters = null) {
  86. return $this->exequery($sql, $parameters);
  87. }
  88. /**
  89. * 返回为单条记录
  90. * @param $sql
  91. * @param $parameters
  92. * @return
  93. */
  94. public function queryrow($sql, $parameters = null) {
  95. $rs = $this->exequery($sql, $parameters);
  96. if (count($rs) > 0) {
  97. return $rs[0];
  98. } else {
  99. return null;
  100. }
  101. }
  102. /**
  103. * 查询单字段,返回整数
  104. * @param $sql
  105. * @param $parameters
  106. * @return
  107. */
  108. public function queryforint($sql, $parameters = null) {
  109. $rs = $this->exequery($sql, $parameters);
  110. if (count($rs) > 0) {
  111. return intval($rs[0][0]);
  112. } else {
  113. return null;
  114. }
  115. }
  116. /**
  117. * 查询单字段,返回浮点数(float)
  118. * @param $sql
  119. * @param $parameters
  120. * @return
  121. */
  122. public function queryforfloat($sql, $parameters = null) {
  123. $rs = $this->exequery($sql, $parameters);
  124. if (count($rs) > 0) {
  125. return floatval($rs[0][0]);
  126. } else {
  127. return null;
  128. }
  129. }
  130. /**
  131. * 查询单字段,返回浮点数(double)
  132. * @param $sql
  133. * @param $parameters
  134. * @return
  135. */
  136. public function queryfordouble($sql, $parameters = null) {
  137. $rs = $this->exequery($sql, $parameters);
  138. if (count($rs) > 0) {
  139. return doubleval($rs[0][0]);
  140. } else {
  141. return null;
  142. }
  143. }
  144. /**
  145. * 查询单字段,返回对象,实际类型有数据库决定
  146. * @param $sql
  147. * @param $parameters
  148. * @return
  149. */
  150. public function queryforobject($sql, $parameters = null) {
  151. $rs = $this->exequery($sql, $parameters);
  152. if (count($rs) > 0) {
  153. return $rs[0][0];
  154. } else {
  155. return null;
  156. }
  157. }
  158. /**
  159. * 执行一条更新语句.insert / upadate / delete
  160. * @param $sql
  161. * @param $parameters
  162. * @return 影响行数
  163. */
  164. public function update($sql, $parameters = null) {
  165. return $this->exeupdate($sql, $parameters);
  166. }
  167. private function getconnection() {
  168. $conn = new pdo(dbconfig::getdsn(), dbconfig::getusername(), dbconfig::getpassword());
  169. $conn->setattribute(pdo::attr_case, pdo::case_upper);
  170. return $conn;//开源代码phpfensi.com
  171. }
  172. private function exequery($sql, $parameters = null) {
  173. $conn = $this->getconnection();
  174. $stmt = $conn->prepare($sql);
  175. $stmt->execute($parameters);
  176. $rs = $stmt->fetchall();
  177. $stmt = null;
  178. $conn = null;
  179. return $rs;
  180. }
  181. private function exeupdate($sql, $parameters = null) {
  182. $conn = $this->getconnection();
  183. $stmt = $conn->prepare($sql);
  184. $stmt->execute($parameters);
  185. $affectedrows = $stmt->rowcount();
  186. $stmt = null;
  187. $conn = null;
  188. return $affectedrows;
  189. }
  190. }

pdo始于php5,php6中将默认使用pdo,不同于以前版本中混乱的数据库操作方式,pdo统一了对数据库的访问方式,给编程带来了极大的便利性,本工具类就是基于pdo,模拟了java世界spring框架中的jdbctemplate操作类.