<?php

header("content-type:text/html;charset=utf-8");

class db{
    //私有的静态属性
    private static $dbcon = false ;
    //私有的构造方法
    private function __construct($dbname){
        $dbcon = @mysql_connect('127.0.0.1', 'root', 'root');
        mysql_select_db($dbname, $dbcon) or die("mysql connect error");
        mysql_query("set names utf8", $dbcon);
    }
    //私有的克隆方法
    private function __clone(){}
    
    //公共的静态方法, 数据库连接对象
    public static function getInstance($dbname){
        if(self::$dbcon == false){
            self::$dbcon = new self($dbname);
        }
        return self::$dbcon;
    }
    /**
     * 执行语句
     * @param  $sql
     * @return source
     */
    public function query($sql){
        return mysql_query($sql);
    }
    /**
     * 查询某个字段, 例如 select count(*),  select username
     * @param  $sql
     * @return string or int
     */
    public function getOne($sql){
        $query = $this->query($sql);
        return mysql_result($query, 0);
    }
    /**
     * 获取一行记录
     * @param  $sql
     * @return array 一维
     */
    public function getRow($sql, $type='assoc'){
        $query = $this->query($sql);
        if(!in_array($type, array("assoc", "array", "row"))){
            die("mysql_query error");
        }
        $functionname = "mysql_fetch_".$type;
        return $functionname($query);
    }
    /**
     * 前置条件:通过资源获取一条记录
     * @param  $query source
     * @return array 一维
     */
    public function getRowFromSource($query, $type="assoc"){
        if(!in_array($type, array("assoc", "array", "row"))){
            die("mysql_query error");
        }
        $functionname = "mysql_fetch_".$type;
        return $functionname($query);
    }
    /**
     * 获取所有记录
     * @param  $sql
     * @return array 二维
     */
    public function getAll($sql){
        $query = $this->query($sql);
        $list = array();
        while ($row = $this->getRowFromSource($query)) {
            $list[] = $row;
        }
        return $list;
    }
    /*
    * 新增数据方法
    * @param1 $table, $data 表名 数据
    * @return 上一次增加操做产生ID值
    */
    public function insert($table, $data){
        //遍历数组,得到每一个字段和字段的值
        $kstr = '' ;
        $vstr = '' ;
        foreach ($data as $key => $val) {
            //$key是字段名, $val是对应的值
            $kstr .= $key."," ;
            $vstr .= "'$val',";
        }
        $kstr = rtrim($kstr, ',');
        $vstr = rtrim($vstr, ',');
        //添加的sql语句
        $sql = "insert into $table ($kstr) values ($vstr)";
        
        //执行
        $this->query($sql);
        //返回上一次增加操做产生ID值
        return $this->getInsertId();
    }
    /*
    * 删除一条数据方法
    * @param1 $table, $where=array('id'=>'1') 表名 条件
    * @return 受影响的行数
    */
    public function deleteOne($table, $where){
        if(is_array($where)){
            foreach ($where as $key => $val) {
                $condition = $key.'='.$val;
            }
        } else {
            $condition = $where;
        }
        $sql = "delete from $table where $condition";
        $this->query($sql);
        //返回受影响的行数
        return mysql_affected_rows();
    }
    /*
    * 删除多条数据方法
    * @param1 $table, $where 表名 条件
    * @return 受影响的行数
    */
    public function deleteAll($table, $where){
        if(is_array($where)){
            foreach ($where as $key => $val) {
                if(is_array($val)){
                    $condition = $key.' in ('.implode(',', $val) .')';
                } else {
                    $condition = $key. '=' .$val;
                }
            }
        } else {
            $condition = $where;
        }
        $sql = "delete from $table where $condition";
        $this->query($sql);
        //返回受影响的行数
        return mysql_affected_rows();
    }
    /*
    * 修改数据方法
    * @param1 $table,$data,$where 表名 数据 条件
    * @return 受影响的行数
    */
    public function update($table,$data,$where){
        //遍历数组,得到每一个字段和字段的值
        $str='';
        if(is_array($data)){
            foreach($data as $key=>$v){
                $str.="$key='$v',";  
            }
            $str=rtrim($str,',');
            //修改的SQL语句
            $sql="update $table set $str where $where";
        } else {
            //修改的SQL语句
            $sql="update $table set $data where $where";
        }
        $this->query($sql);
        //返回受影响的行数
        return mysql_affected_rows();
    }
    /**
     * 获取刚插入数据的id
     * @return int
     */
    public function getInsertId(){
        return mysql_insert_id();
    }
    /**
     * print_r 打印数据
     */
    public function p($arr){
        echo "<pre>";
        print_r($arr);
        echo "</pre>";
    }
    /**
     * var_dump 打印数据
     */
    public function v($arr){
        echo "<pre>";
        var_dump($arr);
        echo "</pre>";
    }

}
// $dbname = 'yii2_project';
// $db = db::getInstance($dbname);
// // where article_id=1
// // $sql = "select * from article";
// // $arr = $db->getAll($sql);
// $db->p($db);

                *************  mysqli  ************
<?php

//header
header('content-type:text/html;charset=UTF-8');

class DB {
    //定义属性
    private $host;//主机名
    private $port;//端口号
    private $name;//用户名
    private $pass;//密码
    private $dbname;//数据库名
    private $charset;//设置字符集
    private $link;//连接数据库
    private static $instance;
    //初始化  构造函数
    private function __construct($arr = array()){
        $this->host = isset($arr['host']) ? $arr['host'] : 'localhost' ;
        $this->port = isset($arr['port']) ? $arr['port'] : '3306' ;
        $this->name = isset($arr['name']) ? $arr['name'] : 'root' ;
        $this->pass = isset($arr['pass']) ? $arr['pass'] : 'root' ;
        $this->dbname = isset($arr['dbname']) ? $arr['dbname'] : 'yii2_project' ;
        $this->charset = isset($arr['charset']) ? $arr['charset'] : 'utf8' ;
        //连接数据库
        $this->db_connect();
        //选择数据库
        $this->db_usedb();
        //设置字符集
        $this->db_charset();
    }
    //连接数据库
    private function db_connect(){
        //主机名:端口号   用户名  密码
        $this->link = mysqli_connect($this->host.':'.$this->port, $this->name, $this->pass);
        //连接失败
        if(!$this->link){
            echo '数据库连接失败<br>';
            echo '错误编码是:'.mysqli_errno($this->link).'<br>';
            echo '错误信息是:'.mysqli_error($this->link).'<br>';
            exit;
        }
    }
    //选择数据库
    private function db_usedb(){
        mysqli_query($this->link, "use {$this->dbname}");
    }
    //设置字符集
    private function db_charset(){
        mysqli_query($this->link, "set names {$this->charset}");
    }
    //私有化克隆函数,防止外界克隆对象
    private function __clone()
    {
    }
 
    //单例访问统一入口
    public static function getInstance($arr)
    {
        if(!(self::$instance instanceof self))
        {
            self::$instance = new self($arr);
        }
        return self::$instance;
    }    
    /**
     * 执行语句
     * @param  $sql
     * @return source
     */
    private function query($sql){
        $res = mysqli_query($this->link, $sql);
        if(!$res){
            echo 'sql语句有错误<br>';
            echo '错误编码是:'.mysqli_errno($this->link).'<br>';
            echo '错误信息是:'.mysqli_error($this->link).'<br>';
            exit;
        }
        return $res;//成功返回数据
    }
    /**
     * 获取刚插入数据的id
     * @return int
     */
    public function getInsertId(){
        return mysqli_insert_id($this->link);
    }
    /**
     * 查询某个字段, 例如 select count(*),  select username
     * @param  $sql
     * @return string or int
     */
    public function getOne($sql){
        $query = $this->query($sql);
        return mysqli_free_result($query);
    }
    /**
     * 获取一行记录
     * @param  $sql
     * @return array 一维
     */
    public function getRow($sql, $type='assoc'){
        $query = $this->query($sql);
        if(!in_array($type, array("assoc", "array", "row"))){
            die("mysql_query error");
        }
        $functionname = "mysqli_fetch_".$type;
        return $functionname($query);
    }
    /**
     * 前置条件:通过资源获取一条记录
     * @param  $query source
     * @return array 一维
     */
    public function getRowFromSource($query, $type="assoc"){
        if(!in_array($type, array("assoc", "array", "row"))){
            die("mysql_query error");
        }
        $functionname = "mysqli_fetch_".$type;
        return $functionname($query);
    }
    /**
     * 获取所有记录
     * @param  $sql
     * @return array 二维
     */
    public function getAll($sql){
        $query = $this->query($sql);
        $list = array();
        while ($row = $this->getRowFromSource($query)) {
            $list[] = $row;
        }
        return $list;
    }
    /*
    * 新增数据方法
    * @param1 $table, $data 表名 数据
    * @return 上一次增加操做产生ID值
    */
    public function insert($table, $data){
        //遍历数组,得到每一个字段和字段的值
        $kstr = '' ;
        $vstr = '' ;
        foreach ($data as $key => $val) {
            //$key是字段名, $val是对应的值
            $kstr .= $key."," ;
            $vstr .= "'$val',";
        }
        $kstr = rtrim($kstr, ',');
        $vstr = rtrim($vstr, ',');
        //添加的sql语句
        $sql = "insert into $table ($kstr) values ($vstr)";
        
        //执行
        $this->query($sql);
        //返回上一次增加操做产生ID值
        return $this->getInsertId();
    }
    /*
    * 删除一条数据方法
    * @param1 $table, $where=array('id'=>'1') 表名 条件
    * @return 受影响的行数
    */
    public function deleteOne($table, $where){
        if(is_array($where)){
            foreach ($where as $key => $val) {
                $condition = $key.'='.$val;
            }
        } else {
            $condition = $where;
        }
        $sql = "delete from $table where $condition";
        $this->query($sql);
        //返回受影响的行数
        return mysqli_affected_rows($this->link);
    }
    /*
    * 删除多条数据方法
    * @param1 $table, $where 表名 条件
    * @return 受影响的行数
    */
    public function deleteAll($table, $where){
        if(is_array($where)){
            foreach ($where as $key => $val) {
                if(is_array($val)){
                    $condition = $key.' in ('.implode(',', $val) .')';
                } else {
                    $condition = $key. '=' .$val;
                }
            }
        } else {
            $condition = $where;
        }
        $sql = "delete from $table where $condition";
        $this->query($sql);
        //返回受影响的行数
        return mysqli_affected_rows($this->link);
    }
    /*
    * 修改数据方法
    * @param1 $table,$data,$where 表名 数据 条件
    * @return 受影响的行数
    */
    public function update($table,$data,$where){
        //遍历数组,得到每一个字段和字段的值
        $str='';
        if(is_array($data)){
            foreach($data as $key=>$v){
                $str.="$key='$v',";  
            }
            $str=rtrim($str,',');
            //修改的SQL语句
            $sql="update $table set $str where $where";
        } else {
            //修改的SQL语句
            $sql="update $table set $data where $where";
        }
        $this->query($sql);
        //返回受影响的行数
        return mysqli_affected_rows($this->link);
    }

}

php封装数据库mysql, mysqli的更多相关文章

  1. 封装数据库mysql, mysqli

    <?php header("content-type:text/html;charset=utf-8"); class db{    //私有的静态属性    private ...

  2. php 通过mysqli 操作数据库mysql

    目录 php mysqli 操作数据库 连接数据库 通过mysqli 创建数据库 通过mysqi 创建数据表 通过mysqli向数据表中插入信息 通过mysqli 读取数据 where语句的应用 通过 ...

  3. PHP学习(四)---PHP与数据库MySql

    主要有以下的内容: 1.怎么连接数据库 2.怎么操作数据库 (1)怎么执行sql语言 (2)怎么处理返回的结果集 方法一:面向过程(已经过时,只是了解) 假设: $username=your_name ...

  4. PHP封装数据库

    (1)按照步骤封装数据库 ①引入抽象类和抽象方法,即引入模板: ②继承抽象类,注意参数(规定几个就传入几个): ③逐个写入抽象方法,必须一一对应:(抽象方法必须一一引入,否则会报错-->有个抽象 ...

  5. C#简单构架之EF进行读写分离+多数据库(Mysql/SqlService)

    最近因为项目需要,研究了下EF的读写分离,所以做了一个demo进行测试,下面是项目的结构 表现层view 主要提供Web.WebApi等表现层的解决方案 公共层public 主要提供项目公共类库,数据 ...

  6. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  7. 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

    数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...

  8. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限

    1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Pas ...

  9. Robot Framework-DatabaseLibrary数据库(MySql)

    Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...

随机推荐

  1. 在DevExpress GridControl中添加进度条控件 z

    首先可以使用 DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所有的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...

  2. [Algorithm] JavaScript Graph Data Structure

    A graph is a data structure comprised of a set of nodes, also known as vertices, and a set of edges. ...

  3. Java菜鸟到大牛学习路线培训教程

    第1阶段(Java程序员) - Java语言基础 - 101 JavaSE -01-常见Dos命令.Java历史.Java跨平台.配置Path环境变量.第一个HelloWorld例子 -02-配置JA ...

  4. mysql delete auto_increment列时的注意问题

    1. 说明 在对带有AUTO_INCREMENT列的表delete掉所有数据时: (1)对于MyISAM表,在delete表中所有数据时没有任何风险,随意折腾: (2)对于InnoDB表,在delet ...

  5. css3 - 动态伪类

    动态伪类分为以下几种: 1. hover(经过) 2. active(点击后) 3. focus(聚焦) - input专用 4. visited(访问后) 使用:

  6. vue2.0 + vux (三)MySettings 页

    1.MySettings.vue <!-- 我的设置 --> <template> <div> <img class="img_1" sr ...

  7. python(35)- 异常处理

    一 错误和异常 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)   #语法错误示范一 if #语法错误示范二 ...

  8. Mysql导出大量数据

    outfile 导出文件   select name from t1 into outfile "/tmp/test.txt"   infile 导入文件 导入到表t1中的name ...

  9. 【NoSql】Redis实践篇-简单demo实现(一)

    Redis是一个key-value存储系统. Redis的出现,非常大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到非常好的补充作用 Redis是一个ke ...

  10. 【Sprint3冲刺之前】敏捷团队绩效考核(刘铸辉)

     TD学生助手团队已经在4.22~4.30完成了为期9天的Sprint2计划,并在Sprint2总结会议中安排了五一放假每个人的任务分配,下面发布下Sprint2冲刺周期的阶段性成果. Sprint2 ...