51)PHP,一个数据库操作类的代码

时间:2022-06-01 20:40:58
  1 <?php
2 //类名,也习惯上(推荐)使用跟文件名相似的名字
3 //定义一个mysql连接类,该类可以连接mysql数据库
4 //并实现其单例模式
5 //该类的功能还能够完成如下基本mysql操作:
6 //执行普通的增删改非返回结果集的语句
7 //执行select语句并可以返回3种类型的数据:
8 //多行结果(二维数组),单行结果(一维数组)
9 //单行单列(单个数据)
10 class MySQLDB{
11 public $host;
12 public $port;
13 public $username;
14 public $password;
15 public $charset;
16 public $dbname;
17
18 //连接结果(资源)
19 private static $link;
20
21 private $resourc;
22 //下面的这个就是单例模式所加的函数,为啥加这个函数,就是叫这个类只是实例化一次就够了。
23 public static function getInstance($config){
24 if(!isset(self::$link)){
25 self::$link = new self($config);

//为啥self后面的括号里面加上$config,因为要和那个__construct函数的传的变量是一致的,你是实例化类不就是调用那个__construct函数一次嘛,所以啊,实例化对象就是调用__construct函数。 26 }
27 return self::$link;
28 }
29
30 //构造函数:禁止new
31 private function __construct($config){
32 //初始化数据
33 $this->host = isset($config['host']) ? $config['host'] : 'localhost';
34 $this->port = isset($config['port']) ? $config['port'] : '3306';
35 $this->username = isset($config['username']) ? $config['username'] : 'root';
36 $this->password = isset($config['password']) ? $config['password'] : '';
37 $this->charset = isset($config['charset']) ? $config['charset'] : 'utf8';
38 $this->dbname = isset($config['dbname']) ? $config['dbname'] : '';
39
40 //连接数据库
41 $this->connect();
42 //设定连接编码
43 $this->setCharset($this->charset);
44 //选定数据库
45 $this->selectDb($this->dbname);
46 }
47 //禁止克隆,禁止克隆,禁止克隆,就是将这个方法变成一个私有的,这样的在类的外面不就不能调用那个模数方法了,那么也就不能克隆对象了。
48 private function __clone(){}
49 //这里进行连接
50 public function connect(){
51 $this->resourc = mysql_connect("$this->host:$this->port", "$this->username","$this->password") or die("连接数据库失败!");
52 }
53 public function setCharset($charset){
54 //mysql_set_charset($charset, $this->resourc);
55 $this->query("set names $charset");
56 }
57 public function selectDb($dbname){
58 //mysql_select_db($dbname, $this->resourc);
59 $this->query("use $dbname;") ;
60 }
61
62 /**
63 * 功能:执行最基本(任何)sql语句
64 * 返回:如果失败直接结束,如果成功,返回执行结果
65 */
66 public function query($sql){
67 if(!$result = mysql_query($sql, $this->resourc))
68 {
69 echo ("<br />执行失败。");
70 echo "<br />失败的sql语句为:" . $sql;
71 echo "<br />出错信息为:" . mysql_error();
72 echo "<br />错误代号为:" . mysql_errno();
73 die();
74 }
75 return $result;
76 }
77 /**
78 * 功能:执行select语句,返回2维数组
79 * 参数:$sql 字符串类型 select语句
80 */
81 public function getAll($sql){
82 $result = $this->query($sql);
83 $arr = array(); //空数组
84 while( $rec = mysql_fetch_assoc( $result )){
85 $arr[] = $rec;//这样就形成二维数组
86 }
87 return $arr;
88 }
89 //返回一行数据(作为一维数组)
90 public function getRow($sql){
91 $result = $this->query($sql);
92 //$rec = array();
93 if( $rec2 = mysql_fetch_assoc( $result )){//返回下标为字段名的数组
94 //如果fetch出来有数据(也就是取得了一行数据),结果自然是数组
95 return $rec2;
96 }
97 return false;
98 }
99 //返回一个数据(select语句的第一行第一列)
100 //比如常见的:select count(*) as c from XXX where ...
101 public function getOne($sql){
102 $result = $this->query($sql);
103 $rec = mysql_fetch_row($result);//返回下标为数字的数组,且下标一定是0,1,2, 3.....
104 //如果没有数据,返回false
105 if($rec === false){
106 return false;
107 }
108 return $rec[0]; //该数组的第一项。
109
110 }
111
112 }