<?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);
}

  

mysqli 封装的更多相关文章

  1. Mysqli封装

    <?php //headerheader('content-type:text/html;charset=UTF-8'); class DB {    //定义属性    private $ho ...

  2. php中mysql与mysqli的区别

    两个函数都是用来处理DB 的.首先, mysqli 连接是永久连接,而mysql是非永久连接. mysql连接每当第二次使用的时候,都会重新打开一个新的进程,而mysqli则只使用同一个进程,这样可以 ...

  3. mysql 与 mysqli的区别

    mysqli.dll是PHP对mysql新特性的一个扩展支持.在PHP5中可以在php.ini中加载mysql后面的i,指improved, interface, ingenious, incompa ...

  4. PHP数据库连接mysql与mysqli的区别与用法

    一.mysql与mysqli的概念相关: 1.mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. 2.在php5版本之前,一般是用php的mysql函数去驱动mysql数据库 ...

  5. mysql与mysqli的一些区别和方法

    一.mysql与mysqli的概念相关: 1.mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. 2.在php5版本之前,一般是用php的mysql函数去驱动mysql数据库 ...

  6. mysqli函数库的使用

    综述 1.什么是mysqli PHP-MySQL 函数库是 PHP 操作 MySQL 资料库最原始的扩展库,PHP-MySQLi 的 i 代表 Improvement ,相当于前者的增强版,也包含了相 ...

  7. mysqli 进一步分析

    1. 一.mysql与mysqli的概念相关: 1.mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. 2.在php5版本之前,一般是用php的mysql函数去驱动mysql ...

  8. mysqli一些常用方法及详解

    mysqli一些常用方法及详解 1.die()函数:表示向用户输出引号中的内容后,程序终止运行,提示定制的出错信息 ex: $conn = mysqli_connect("localhost ...

  9. mysql和mysqli使用笔记

    总体来说还算兼容得还行,很多函数直接加个i 即可,比如mysql_connect -> mysqli_connect. 有些细小的区别,mysqli 更严格,当变量有与字段重名时,改变变量名才可 ...

随机推荐

  1. plpgsql: 动态插入数据 1

    --目标:1.建立一个函数实现 输入一个表名(tableName)tableName,一个JSON串{feildName1:feildVale1,feildName2:feildVale2} -- 然 ...

  2. 关于h5中背景音乐的自动播放

    音乐的自动播放属性,这里也介绍一下: <audio controls="controls" autoplay="autoplay"> <sou ...

  3. 基于Myeclipse的三大框架(SSH)整合

    文中主要基于Myeclipse进行配置,配置流程为:Hibernate --> Spring --> 整合 --> struts2 -->整合.注意:在此文中,主要讲述基于注解 ...

  4. ImportError: No module named flask.ext.wtf 解决方法

    install pip install flask.ext.wtf

  5. python实现微信打飞机游戏(by crossin)

    # -*- coding: utf-8 -*- import pygame from sys import exit import random pygame.init() screen = pyga ...

  6. iOS 随机数(Fixed)

    ios 有如下三种随机数方法: 1.    srand((unsigned)time(0));  //不加这句每次产生的随机数不变         int i = rand() % 5; 2.     ...

  7. pathForResource获取资源为nil的原因

    利用NSbundle获取 资源文件的时候,如果是自己添加的文件,获取的时候纵使返回nil的解决办法.原因是因为该文件没有添加到资源文件中,只要在添加文件的时候选择添加到 Create Folder R ...

  8. H5新特性:

    新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 audio 本 ...

  9. 【转】数据库SQL的一些总结

    http://www.cnblogs.com/yank/category/104903.html

  10. python3中bytes、hex和字符串相互转换

    1.字符串转bytes a = 'abcd' a1 = bytes(a,encoding('utf-8')) 2.bytes转字符串 a = b'abcd' a1 = bytes.decode(a , ...