<?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. Unix domain socket

    转载:http://www.cnblogs.com/chekliang/p/3222950.html socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是 ...

  2. Java使用QRCode.jar生成与解析二维码

    原文V:http://www.cnblogs.com/bigroc/p/7496995.html#3797682 正题:Java使用QRCode.jar生成与解析二维码demo 欢迎新手共勉,大神监督 ...

  3. Android gradle 相关配置

    有时候我们需要重命名输出apk文件名,在Android studio 3.0以前我们是这样写的: applicationVariants.all { variant -> variant.out ...

  4. python 使用cx-freeze打包程序

    python环境 3.6.5      win7   linux环境同理 先尝试了PyInstaller   ,打包时一直提示 no module named gtk   而gtk 又依赖pygobj ...

  5. hdoj 4828 卡特兰数取模

    Grids Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Sub ...

  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. Android 音频的播放之二MediaPlayer

    MediaPlayer类可用于控制音频/视频文件或流的播放.关于怎样使用这个类的方法还能够阅读VideoView类的文档. 1.状态图 对播放音频/视频文件和流的控制是通过一个状态机来管理的. 下图显 ...

  8. 怎样在C语言里实现“面向对象编程”

    有人觉得面向对象是C++/Java这样的高级语言的专利,实际不是这样.面向对象作为一种设计方法.是不限制语言的.仅仅能说,用C++/Java这样的语法来实现面向对象会更easy.更自然一些. 在本节中 ...

  9. Ecilpse绑定jdk的源码

    因为近期才入职,所以电脑环境才配好,今天在写代码的时候,想查看源码,发现不能查看,所以在网上百度了一下: 下面是解决方法: 1.在Ecilpse的窗体下,点击Preferences 2.然后点击Jav ...

  10. Cocos2d-x 3.0的启动流程

    Cocos2d-x 3.0变动非常大,包含启动的方式,我看了下对android的启动总结例如以下: Java方面:     AppActivity继承Cocos2dxActivity     Coco ...