时间:2021-07-01 10:21:17 帮助过:24人阅读
DB.class.php
- <?php
- /**
- * Created by PhpStorm.
- * User: brady.wang
- * Date: 2017/11/10
- * Time: 18:00
- */
- //封装一个DB类,用来专门操作数据库,以后凡是对数据库的操作,都由DB类的对象来实现
- class DB{
- //属性
- private $host;
- private $port;
- private $user;
- private $pass;
- private $dbname;
- private $charset;
- private $prefix; //表前缀
- private $link; //连接资源(连接数据库,一般会返回一个资源,所以需要定义一个link属性)
- //构造方法(作用:为了初始化对象的属性),会被自动调用
- /*
- * @param1 array $arr,默认为空,里面是一个关联数组,里面有7个元素
- * array(‘host‘ => ‘localhost‘,‘port‘ => ‘3306‘);
- */
- public function __construct($arr = array()){
- //初始化
- $this->host = isset($arr[‘host‘]) ? $arr[‘host‘] : ‘localhost‘;//先判断是否有自己的host,如果有就用自己的host,否则就使用默认的localhost
- $this->port = isset($arr[‘port‘]) ? $arr[‘port‘] : ‘3306‘;
- $this->user = isset($arr[‘user‘]) ? $arr[‘user‘] : ‘root‘;
- $this->pass = isset($arr[‘pass‘]) ? $arr[‘pass‘] : ‘root‘;
- $this->dbname = isset($arr[‘dbname‘]) ? $arr[‘dbname‘] : ‘test‘;
- $this->charset = isset($arr[‘charset‘]) ? $arr[‘charset‘] : ‘utf8‘;
- $this->prefix = isset($arr[‘prefix‘]) ? $arr[‘prefix‘] : ‘‘;
- //连接数据库(类是要操作数据库,因此要连接数据库)
- $this->connect();
- //设置字符集
- $this->setCharset();
- //选择数据库
- $this->setDbname();
- }
- /*
- * 连接数据库
- */
- private function connect(){
- //mysql扩展连接
- $this->link = mysql_connect($this->host . ‘:‘ . $this->port,$this->user,$this->pass);
- //判断结果
- if(!$this->link){
- //结果出错了
- //暴力处理,如果是真实线上项目(生产环境)必须写入到日志文件
- echo ‘数据库连接错误:<br/>‘;
- echo ‘错误编号‘ . mysql_errno() . ‘<br/>‘;
- echo ‘错误内容‘ . mysql_error() . ‘<br/>‘;
- exit;
- }
- }
- /*
- * 设置字符集
- */
- private function setCharset(){
- //设置
- $this->db_query("set names {$this->charset}");
- }
- /*
- * 选择数据库
- */
- private function setDbname(){
- $this->db_query("use {$this->dbname}");
- }
- /*
- * 增加数据
- * @param1 string $sql,要执行的插入语句
- * @return boolean,成功返回是自动增长的ID,失败返回FALSE
- */
- public function insert($sql){
- //发送数据
- $this->db_query($sql);
- //成功返回自增ID
- return mysql_affected_rows() ? mysql_insert_id() : FALSE;
- }
- /*
- * 删除数据
- * @param1 string $sql,要执行的删除语句
- * @return Boolean,成功返回受影响的行数,失败返回FALSE
- */
- public function delete($sql){
- //发送SQL
- $this->db_query($sql);
- //判断结果
- return mysql_affected_rows() ? mysql_affected_rows() : FALSE;
- }
- /*
- * 更新数据
- * @param1 string $sql,要执行的更新语句
- * @return Boolean,成功返回受影响的行数,失败返回FALSE
- */
- public function update($sql){
- //发送SQL
- $this->db_query($sql);
- //判断结果
- return mysql_affected_rows() ? mysql_affected_rows() : FALSE;
- }
- /*
- * 查询:查询一条记录
- * @param1 string $sql,要查询的SQL语句
- * @return mixed,成功返回一个数组,失败返回FALSE
- */
- public function get_row($sql){
- //发送SQL
- $res = $this->db_query($sql);
- //判断返回
- return mysql_num_rows($res) ? mysql_fetch_assoc($res) : FALSE;
- }
- /*
- * 查询:查询多条记录
- * @param1 string $sql,要查询的SQL语句
- * @return mixed,成功返回一个二维数组,失败返回FALSE
- */
- public function get_all($sql){
- //发送SQL
- $res = $this->db_query($sql);
- //判断返回
- if(mysql_num_rows($res)){
- //循环遍历
- $list = array();
- //遍历
- while($row = mysql_fetch_assoc($res)){
- $list[] = $row;
- }
- //返回
- return $list;
- }
- //返回FALSE
- return FALSE;
- }
- /*
- * mysql_query错误处理
- * @param1 string $sql,需要执行的SQL语句
- * @return mixed,只要语句不出错,全部返回
- */
- private function db_query($sql){
- //发送SQL
- $res = mysql_query($sql);
- //判断结果
- if(!$res){
- //结果出错了
- //暴力处理,如果是真实线上项目(生产环境)必须写入到日志文件
- echo ‘语句出现错误:<br/>‘;
- echo ‘错误编号‘ . mysql_errno() . ‘<br/>‘;
- echo ‘错误内容‘ . mysql_error() . ‘<br/>‘;
- exit;
- }
- //没有错误
- return $res;
- }
- //__sleep方法
- public function __sleep(){
- //返回需要保存的属性的数组
- return array(‘host‘,‘port‘,‘user‘,‘pass‘,‘dbname‘,‘charset‘,‘prefix‘);
- }
- //__wakeup方法
- public function __wakeup(){
- //连接资源
- $this->connect();
- //设置字符集和选中数据库
- $this->setCharset();
- $this->setDbname();
- }
- /*
- * 获取完整的表名
- */
- protected function get_table_name(){
- //完整表名:前缀+表名
- return $this->prefix . $this->table;
- }
- }
- //这个DB类,一般不写析构(不释放资源)
test.php
- <?php
- /**
- * Created by PhpStorm.
- * User: brady.wang
- * Date: 2017/11/10
- * Time: 18:04
- */
- //使用DB类的对象来访问数据库
- //先加载类文件
- //include_once ‘DB.class.php‘;
- //如果想使用其他类,又需要加载(所以使用魔术函数__autoload来实现类的自动加载)
- //显示的写出魔术函数__autoload
- //参数:需要加载的类的名字
- function __autoload($a){
- //将对应的类文件加载进来
- if(is_file("$a.class.php")){
- include_once "$a.class.php";
- }
- }
- //实例化
- $db = new DB(array(‘host‘ => ‘192.168.33.30‘));
- $sql = "select * from user where id = 1";
- $res = $db->get_row($sql);
- function dump($arr)
- {
- echo "<pre>";
- print_r($arr);
- echo "</pre>";
- }
- dump($res);
封装自己DB
标签:作用 个数 编号 func boolean nbsp 失败 prot cal