<?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. win7 更改同步时间的网址

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\D ...

  2. C# PropertyGrid控件应用心得 【转】

    源文 : http://blog.csdn.net/luyifeiniu/article/details/5426960 c#stringattributesobjectmicrosoftclass ...

  3. hdu5379||2015多校联合第7场1011 树形统计

    pid=5379">http://acm.hdu.edu.cn/showproblem.php? pid=5379 Problem Description Little sun is ...

  4. 编写自己的UDTF

    1. UDTF介绍 UDTF(User-Defined Table-Generating Functions) 用来解决 输入一行输出多行(On-to-many maping) 的需求. 2. 编写自 ...

  5. C++11 并发指南四(<future> 详解一 std::promise 介绍)(转)

    前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...

  6. Nginx优化指南+LINUX内核优化+linux连接数优化+nginx连接数优化

    Most setup guides for Nginx tell you the basics - apt-get a package, modify a few lines here and the ...

  7. Mysql启动自己主动设置max_connections为其它值

    背景 有同学反应.产品连不上,登陆到server.发现连接数不够了. 接着先重新启动mysql,发如今mysql启动的时候会报Waring Warning Changed limits: max_op ...

  8. C递归算法与栈的分析,非全然二叉树遍历分析---ShinePans

                 对于递归,这里面的分析最好当然是用图形的方式来分析了.这里来总结一下 1.首先对于栈的理解: 先进后出,后进先出 先进后出 2.在进行非全然二叉树的存储之后,我们要做的是对其 ...

  9. vs2015终于配置完成了

    安装vs2015,本来应该直接安装vs2015withupdate3的,但是由于当时手上只有vs2015的包,于是直接安装了. 打开C++工程cntk的时候提示需要安装很多东西包括vc编译工具.pyt ...

  10. Java内部类之间的闭包和回调详解

    前言 闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自 ...