PDO操作MySql类分享

为了让自己的数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类,由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不同数据库DSN的配置,PDO操作MYSQL类代码如下:

  1. <?php
  2. /**
  3. * 类标准说明 PDO连接数据库的配置类
  4. * 类名: ConfigDataBase
  5. * 功能说明: 为了让代码重用,利用此类可以动态的连接各种数据库
  6. * 参数说明: $_dbms = "mysql教程"; //数据库类型
  7. * $_host = '127.0.0.1'; //数据库ip地址
  8. * $_port = '3306'; //数据库端口
  9. * $_username = 'root'; //数据库用户名
  10. * $_password = 'liujijun'; //密码
  11. * $_dbname = 'zendf'; //数据库名 默认为zenf
  12. * $_charset = 'utf-8'; //数据库字符编码
  13. * $_dsn;// //data soruce name 数据源
  14. *
  15. *
  16. * 类属性说明:
  17. * 类方法说明:
  18. * 返回值: 不同函数返回不同的值
  19. * 备注说明:
  20. * 作者: 刘纪君
  21. * 最后一次修改时间: 2011下午02:01:39
  22. *
  23. */
  24. class ConfigDataBase {
  25. protected static $_dbms = "mysql"; //数据库类型
  26. protected static $_host = '127.0.0.1'; //数据库ip地址
  27. protected static $_port = '3306'; //数据库端口
  28. protected static $_username = 'root'; //数据库用户名
  29. protected static $_password = 'liujijun'; //密码
  30. protected static $_dbname = 'zendf'; //数据库名 默认为zenf
  31. protected static $_charset = 'utf-8'; //数据库字符编码
  32. protected static $_dsn;// //data soruce name 数据源
  33. /**
  34. *@return 返回数据源名
  35. */
  36. public static function getDsn() {
  37. //将变量的值组合成 mysql:host=localhost;port =3306;dbname=test',$login,$passwd的形式
  38. if (!isset(self::$_dsn)){
  39. self::$_dsn = self::$_dbms.':host = '.self::$_host.';prot = '.
  40. self::$_port . ';dbname = ' . self::$_dbname.','.
  41. self::$_username . ','.self::$_password;
  42. if (strlen(self::$_charset) > 0){
  43. self::$_dsn = self::$_dsn . ';charset = ' . self::$_charset;
  44. }
  45. }
  46. return self::$_dsn;//返回数据源名
  47. }
  48. /**
  49. * 功能:设置$dbms
  50. * @param $dbms
  51. */
  52. public static function setDbms($dbms){
  53. if (isset($dbms) &&(strlen($dbms) > 0 )){
  54. self::$_dbms = trim($dbms);
  55. }
  56. }
  57. /**
  58. *
  59. * @param $host //数据库地址
  60. */
  61. public static function setHost($host){
  62. if (isset($host) &&(strlen($host) > 0 )){
  63. self::$_host = trim($host);
  64. }
  65. }
  66. /**
  67. *
  68. * @param $host 端口号
  69. */
  70. public static function setPort($port){
  71. if (isset($port) &&(strlen($port) > 0 )){
  72. self::$_post = trim($port);
  73. }//开源代码phpfensi.com
  74. }
  75. /**
  76. *
  77. * @param $passwd 密码
  78. */
  79. public static function setPasswd($passwd){
  80. if (isset($passwd) &&(strlen($passwd) > 0 )){
  81. self::$_password = trim($passwd);
  82. }
  83. }
  84. /**
  85. *
  86. * @param $username 用户名
  87. */
  88. public static function setUsernName($username){
  89. if (isset($username) &&(strlen($username) > 0 )){
  90. self::$_username = trim($username);
  91. }
  92. }
  93. /**
  94. *
  95. * @param $dbname 数据库名
  96. */
  97. public static function setDbName($dbname){
  98. if (isset($dbname) &&(strlen($dbname) > 0 )){
  99. self::$_dbname = trim($dbname);
  100. }
  101. }
  102. /**
  103. *
  104. * @param $charset 数据库编码
  105. */
  106. public static function setCharset($charset){
  107. if (isset($charset) &&(strlen($charset) > 0 )){
  108. self::$_charset = trim($charset);
  109. }
  110. }
  111. }
  112. 下面是对数据库的操作:
  113. <?php
  114. require_once 'ConfigDataBase.php';
  115. header("Content-Type: text/html; charset=utf-8");//设置编码
  116. /**
  117. * 类标准说明
  118. * 类名: PdoMysql
  119. * 功能说明: 对数据库进行各种操作
  120. * 参数说明:
  121. * 类属性说明:
  122. * 类方法说明:
  123. * 返回值:
  124. * 备注说明:
  125. * 作者: 刘纪君
  126. * 最后一次修改时间: 2011上午10:45:36
  127. *
  128. */
  129. class PdoMysqlOperater{
  130. /**
  131. * @return 返回连接数据库的句柄
  132. */
  133. public function getConnection(){
  134. $connection = NULL;
  135. try {
  136. $connection = new PDO(ConfigDataBase::getDsn());
  137. echo 'Success';
  138. } catch (PDOException $e) {
  139. print "Error in connection :".$e->getMessage().' '.die();
  140. }
  141. return $connection;
  142. }
  143. /**
  144. *
  145. * @param $connection 连接数据库的句柄
  146. */
  147. public function closeConnection($connection){
  148. try {
  149. if ($connection != null) {
  150. $connection = null;//关闭数据库连接句柄
  151. }
  152. } catch (Exception $e) {
  153. print 'Close the connectin is error:'.$e->getMessage();
  154. }
  155. }
  156. /**
  157. * 功能: 向数据库中增加数据
  158. * @param $sql sql语句
  159. */
  160. public function insertDatabase($sql){
  161. $affect = false;//失败返回false
  162. try {
  163. $conn = $this->getConnection();
  164. $conn->exec($sql);
  165. $affect = true;//插入成功返回true
  166. $this->closeConnection($conn);//关闭数据库
  167. } catch (PDOException $e) {
  168. print 'Insert error '.$e->getMessage();
  169. }
  170. return $affect;//返回值
  171. }
  172. /**
  173. *
  174. * @param $id 表的主键id
  175. * @param $tableName 表名
  176. */
  177. public function deleltById($id,$tableName){
  178. $affact = false;
  179. $sql = 'delete from '.trim($tableName).' where id = '.$id;
  180. try {
  181. $conn = $this->getConnection();
  182. $conn->exec($sql);
  183. $this->closeConnection($conn);
  184. $affact = true;
  185. } catch (PDOException $e) {
  186. print 'Delelte error is '.$e->getMessage();
  187. }
  188. return $affact;
  189. }
  190. /**
  191. * 功能: 以and 的形式删除记录
  192. * @param $tableName 表的名称
  193. * @param $array 数组表中字段名=其值的方式进行组合
  194. */
  195. public function prepareDeleteAnd($tableName,array $array=null){
  196. $sql = 'delete from '. $tableName . ' where ';
  197. $count = count($array);//计算数组的长度
  198. $flag = 0;//设置标记
  199. foreach ($array as $key => $value){
  200. $flag++;//让flag增加一
  201. $sql .= $key .'='."'".$value."'";
  202. if ($flag != $count ){//当falg不等于count时,数组还有值,后面增加and,反之不增加
  203. $sql .= ' and ';
  204. }
  205. }
  206. echo $sql;//测试sql语句的组合
  207. try {
  208. $conn = $this->getConnection();//获取连接
  209. $conn->prepare($sql);
  210. $this->closeConnection();
  211. } catch (PDOException $e) {
  212. print 'Delete error is '.$e->getMessage();
  213. }
  214. }
  215. /**
  216. * 功能: 以or 的形式删除记录
  217. * @param $tableName 表的名称
  218. * @param $array 数组表中字段名=其值的方式进行组合
  219. */
  220. public function prepareDeleteOr($tableName,array $array=null){
  221. $sql = 'delete from '. $tableName . ' where ';
  222. $count = count($array);//计算数组的长度
  223. $flag = 0;//设置标记
  224. foreach ($array as $key => $value){
  225. $flag++;//让flag增加一
  226. $sql .= $key .'='."'".$value."'";
  227. if ($flag != $count ){//当falg不等于count时,数组还有值,后面增加and,反之不增加
  228. $sql .= ' or ';
  229. }
  230. }
  231. echo $sql;//测试sql语句的组合
  232. try {
  233. $conn = $this->getConnection();//获取连接
  234. $stmt = $conn->prepare($sql);
  235. $stmt->execute();//执行
  236. $this->closeConnection();
  237. } catch (PDOException $e) {
  238. print 'Delete error is '.$e->getMessage();
  239. }
  240. }
  241. /**
  242. * 功能: 取得表中所有数据
  243. * @param $sql sql语句
  244. */
  245. public function getAll($sql){
  246. $result = null;
  247. try {
  248. $conn = $this->getConnection();
  249. $result = $conn->query($sql);
  250. $this->closeConnection($conn);
  251. } catch (PDOException $e) {
  252. print 'GetAll error is '.$e->getMessage();
  253. }
  254. }
  255. /**
  256. * 功能:更新数据表中的信息
  257. * @param $table 要更新的表名
  258. * @param array $updateFiled 要更新的字段
  259. * @param array $updateConditon 更新需要的条件
  260. */
  261. public function updateDataBase($table,array $updateFiled,array $updateConditon ){
  262. $sql = 'update from ' .$table .' set ';
  263. //对set字段进行赋值操作
  264. $count = count($updateFiled);//获取要修改数组的长度
  265. $flag = 0;//设置标记为0
  266. foreach ($updateFiled as $key => $value){
  267. $flag++;
  268. $sql .= $key .'='."'".$value."'";
  269. if ($flag != $count){
  270. $sql .=',';
  271. }
  272. }
  273. //对where条件进行赋值
  274. $countUpdateCondition = count($updateConditon);//获取要修改数组的长度
  275. $flag = 0;//设置标记为0
  276. $sql .= ' where ';
  277. foreach ($updateConditon as $key => $value){
  278. $flag++;
  279. $sql .= $key .'='."'".$value."'";
  280. if ($flag != $countUpdateCondition){
  281. $sql .=' and ';
  282. }
  283. }
  284. try {
  285. $conn = $this->getConnection();
  286. $conn->exec($sql);
  287. $this->closeConnection($conn);
  288. } catch (PDOException $e) {
  289. print 'Update error is :'.$e->getMessage();
  290. }
  291. }
  292. /**
  293. * 功能: 根据表和提高的查询条件进行查询
  294. * 返回值: 返回结果集
  295. * @param $table 数据表名
  296. * @param array $findCondition 查询条件
  297. */
  298. public function findData($table,array $findCondition){
  299. $sql = 'select from '.$table .' where ';
  300. $count = count($findCondition);//获取查询条件数组的长度
  301. $flag = 0;//设置标记为0
  302. foreach ($findCondition as $key => $value){
  303. $flag++;
  304. $sql .= $key .'='."'".$value."'";
  305. if ($flag != $count){
  306. $sql .=' and ';
  307. }
  308. }
  309. try {
  310. $conn = $this->getConnection();
  311. $conn->exec($sql);
  312. $this->closeConnection($conn);
  313. } catch (PDOException $e) {
  314. print 'find error is :'.$e->getMessage();
  315. }
  316. }
  317. }
  318. //测试
  319. $db = new PdoMysqlOperater();
  320. $db->findData('liujijun',array('name'=>'liujijun','name1'=>'liujijun'));
  321. ?>