日期:2014-05-16  浏览次数:20552 次

自己写的数据库pdo操作类,显摆一下
先说好,麻烦各位手下留情,头破血流的写了这么一个类,鄙视的话请温柔些。主要觉得DB类里有面向对象,有PDO,有sql语句,还有 try...catch.这些都是刚教的,融合融合写在一起也加深下理解,写到后面写嗨了,就真想写个以后一直能用的类,现在这个样子还算满意。有写的不合适的地方,大家多提意见,其他的我选择性忽略。

多说几句废话,好多同学刚开始的学面向对象的时候都很懵,我也一样,然后我就不耻下问的去问度娘,度娘说了一大堆废话,翻来覆去的总是那几句。在我心生恨意,低头不语的时候,忽然悟了,不是悟了什么是面向对象,是悟了度娘为什么要把这几句废话翻来覆去的说。原来重点不在于什么是面向对象,而在于你是不是 “明白”面向对象。好吧!我也开始废话了。我的意思是说,如果你从来没有吃过盐,那不论我怎么解释什么是咸,你都不会“明白”对吧。人总是喜欢用比较的方式来理解一个新事物,当发现这个事物居然在经验中没有合适比较的东西时候,就会有点懵,就会不“明白”。就像要用个模板来,套的住的部分能“明白”,套不住的部分,通过比较区别也能“明白”。现在面向对象编程没有合适模板来套,就傻了。有人说,别废话!敢不敢来直接点的。好吧,直接的答案就是把模板能套的都套上去,把没有模板套的变成模板。“这个东西就是这样!”,“你不停的练把它记住就好了”。这两句话熟悉不?你们老师有木有给你们说过,其实目的就是让你把不“明白”的东西练熟,记牢。然后你就“明白”了。

度娘翻来覆去的废话也是想给我说明这个道理吧!明白了这个道理后,我把老师写的DB类敲了6遍,其他类也没放过,然后写了下面的类。额,我意思不是下面类全抄老师的,大部分都是我自己思路哇!算了,不解释,解释就是掩饰是吧?要真不解释就是默认对吧?恩,我懂。。。

开始贴代码,把数据库连接,用户名,密码什么的一改就能用,你会的。连接建立后,echo一下对象就有各种属性,方法说明了。也希望大家能在面向对象的康庄大道上一路狂飚,嗨不嗨自己知道。。。。。
  1. <?php
  2. class db
  3. {
  4. public $DB=null;
  5. public $DB_TYPE="mysql";
  6. public $DB_HOST="localhost";
  7. public $DB_NAME="db49";
  8. public $DB_USER="root";
  9. public $DB_PWD="123";
  10. public $DB_CHARSET="utf8";
  11. public $allTableNames=array();
  12. private $tableName=null;
  13. private $stmt=null;
  14. private $fields=array();
  15. public $pk=null;
  16. //类实例化传参数的格式为(数据库类别,主机地址,数据库名,用户名,密码,字符集,如留空将按默认连接)
  17. public function __construct($type="mysql",$host="localhost",$dbname="db49",$user="root",$pass="123456",$charset="utf8"){
  18. //$cons=func_get_args();
  19. //var_dump($type);
  20. //var_dump($host);
  21. //var_dump($name);
  22. //exit;
  23. $this->DB_TYPE=$type;
  24. $this->DB_HOST=$host;
  25. $this->DB_NAME=$dbname;
  26. $this->DB_USER=$user;
  27. $this->DB_PWD=$pass;
  28. $this->DB_CHARSET=$charset;
  29. $this->connect();
  30. $this->DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);
  31. $this->DB->query('SET NAMES'.$this->charset);
  32. $this->getTablesName();
  33. $this->DB->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  34. $this->DB->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY ,true);
  35. $this->DB->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
  36. }
  37. public function __destruct(){
  38. $this->close();
  39. }
  40. public function close(){
  41. $this->DB=null;
  42. }
  43. private function connect(){
  44. try{
  45. $this->DB=new PDO($this->DB_TYPE.":host=".$this->DB_HOST.";dbname=".$this->DB_NAME,$this->DB_USER,$this->DB_PWD);
  46. }catch(PDOException $e){
  47. die("数据库连接错误:".$e->getMessage());
  48. }
  49. }
  50. //获取表名
  51. public function getTablesName(){
  52. try{
  53. $this->stmt=$this->DB->query('show tables');
  54. //var_dump($this->DB->errorinfo());
  55. while($row=$this->stmt->fetch(PDO::FETCH_NUM)){
  56. $this->allTableNames[]=$row[0];
  57. }
  58. return $this->allTableNames;
  59. $this->stmt=null;
  60. }catch(PDOException $e){
  61. die("获取数据库表名失败".$e->getMessage());
  62. }
  63. }
  64. //设定使用的表名
  65. public function usetable($tname){
  66. try{
  67. if(in_array($tname,$this->allTableNames)){
  68. $this->tableName=$tname;
  69. $this->stmt=$this->DB->query("desc ".$this->tableName);
  70. $this->fieldsall=$this->stmt->fetchAll(PDO::FETCH_ASSOC);
  71. foreach ($this->fieldsall as $row){
  72. $this->fields[]=$row['Field'];
  73. if($row['Key']=="PRI"){
  74. $this->pk=$row['Fi