设计目标:
1,该类一实例化,就可以自动连接上mysql数据库;
2,该类可以单独去设定要使用的连接编码(set names XXX)
3,该类可以单独去设定要使用的数据库(use XXX);
4,可以主动关闭连接;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php /* 设计一个类:mysql数据库操作类 设计目标: 1,该类一实例化,就可以自动连接上mysql数据库; 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX); 4,可以主动关闭连接; */ class MySqlDB{ // 链接资源 private $link = null; // 构造方法 function __construct($host='localhost', $port=3306, $user='root', $pwd='', $charset='utf8', $dbName='mysql'){ $this->link = @mysql_connect("$host:$port", $user, $pwd); // @:阻止警告输出 mysql_query("set names $charset"); // 设置编码 mysql_query("use $dbName"); // 设置使用的数据库 } // 可设置链接编码 function setCharset($charset){ mysql_query("set names $charset"); } // 可设置使用的数据库 function selectDB($dbName){ mysql_query("use $dbName"); } // 可关闭链接 function closeDB(){ mysql_close($this->link); } } # ************************* 测试 ************************* $host = 'localhost'; $port = 3306; $user = 'root'; $pwd = '123456'; $charset = 'utf8'; $dbname = 'db1'; $db = new MySqlDB($host, $port, $user, $pwd, $charset, $dbname); // 测试是否链接成功 $set = mysql_query("select * from student"); var_dump($set); echo "<br>"; // 测试修改编码 $db->setCharset('gbk'); //********** 显示数据 ********** echo "<table border='1'>"; echo "<tr>"; // 获得列数 $field_count = mysql_num_fields($set); for($i=0; $i<$field_count; $i++){ // 获得第 i 列的名称 $field_name = mysql_field_name($set, $i); echo "<td>". $field_name . "</td>"; } echo "</tr>"; // 遍历每一行记录 while($rec = mysql_fetch_array($set)){ echo "<tr>"; for($i=0; $i<$field_count; $i++){ // 获取列名 $field_name = mysql_field_name($set, $i); // 获取该记录,改行的数据 echo "<td>" . $rec[$field_name] . "</td>"; } echo "</tr>"; } echo "</table>"; // ********* end ********** // 测试关闭链接 $db->closeDB(); $set = @mysql_query("select * from student"); var_dump($set); echo "<br>"; ?>
改进: 使用单例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php /* 设计一个类:mysql数据库操作类 设计目标: 1,该类一实例化,就可以自动连接上mysql数据库; 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX); 4,可以主动关闭连接; */ class MySQLDB{ private $link = null; // 用于存储成功链接后的资源 // 属性, 存储链接数据库的基本信息 private $host; private $port; private $user; private $pwd; private $charset; private $dbname; // 1)私有化构造方法 private function __construct($config){ // 保存链接的基本信息 $this->host = !empty($config['host']) ? $config['host'] : "localhost"; $this->port = !empty($config['port']) ? $config['port'] : "3306"; $this->user = !empty($config['user']) ? $config['user'] : "root"; $this->pwd = !empty($config['pwd']) ? $config['pwd'] : ""; $this->charset = !empty($config['charset']) ? $config['charset'] : "utf8"; $this->dbname = !empty($config['dbname']) ? $config['dbname'] : "mysql"; // 链接数据库 $this->link = mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd") or die("链接失败"); // 设定编码 //mysql_query("set names {$config['charset']}"); $this->setCharset($config['charset']); // 设定要使用的数据库名 //mysql_query("use {$config['dbname']}"); $this->selectDB($config['dbname']); } // 2)单例, 存储唯一实例 private static $instance = null; // 3)静态方法,获取唯一实例 static function GetInstance($config){ //if(!isset(self::$instance)){ // ==>等价于 if(!(self::$instance instanceof self)){ // 更常用 self::$instance = new self($config); // 创建并保存起来 } return self::$instance; } // 4)私有化克隆方法 private function __clone(){} // 可设定要使用的编码 function setCharset($charset){ mysql_query("set names $charset", $this->link); } // 可设定要使用的数据库 function selectDB($dbname){ mysql_query("use $dbname", $this->link); } // 可关闭数据库链接 function closeDB(){ mysql_close($this->link); } // 执行 sql 语句,进行错误处理,并返回结果 private function query($sql){ $result = mysql_query($sql, $this->link); if($result === false){ // 失败处理 echo "sql语句执行失败,请参考如下信息:"; echo "<br />错误代码: " . mysql_errno(); echo "<br />错误信息: " . mysql_error(); echo "<br />错误语句: " . $sql; die(); } return $result; } // 执行一条 增删改 sql语句,返回真或假 function exec($sql){ $result = $this->query($sql); return true; } // 执行一条 sql 语句,返回一行记录 function getOneRow($sql){ $result = $this->query($sql); $rec = mysql_fetch_assoc($result); // 提前销毁结果集,否则需要等待页面结束才能自动销毁 mysql_free_result($result); return $rec; } // 执行一条 sql 语句,返回多行记录 function getRows($sql){ $result = $this->query($sql); $arr = array(); while($rec = mysql_fetch_assoc($result)){ $arr[] = $rec; // 二维数组 } mysql_free_result($result); return $arr; } // 执行一条 sql 语句,直接返回一个结果 // 类似于: select count(*) as c from user_list function getOneData($sql){ $result = $this->query($sql); $rec = mysql_fetch_row($result); $data = $rec[0]; mysql_free_result($result); return $data; } } ?>
-------------->>>