<?php

class DB
{
//私有的属性
private static $dbcon = false;
private $host;
private $port;
private $user;
private $pass;
private $db;
private $charset;
private $link; //私有的构造方法
private function __construct($config = array())
{
$this->host = isset($config['host']) ? $config['host'] : '192.168.33.30';
$this->port = isset($config['port']) ? $config['port'] : '3306';
$this->user = isset($config['user']) ? $config['user'] : 'root';
$this->pass = isset($config['pass']) ? $config['pass'] : 'root';
$this->db = isset($config['db']) ? $config['db'] : 'test';
$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->user, $this->pass);
if (!$this->link) {
echo "数据库连接失败<br>";
echo "错误编码" . mysqli_errno($this->link) . "<br>";
echo "错误信息" . mysqli_error($this->link) . "<br>";
exit;
}
} //设置字符集
private function db_charset()
{
mysqli_query($this->link, "set names {$this->charset}");
} //选择数据库
private function db_usedb()
{
mysqli_query($this->link, "use {$this->db}");
} //私有的克隆
private function __clone()
{
die('clone is not allowed');
} //公用的静态方法
public static function getIntance()
{
if (self::$dbcon == false) {
self::$dbcon = new self;
}
return self::$dbcon;
} //执行sql语句的方法
public 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>";
}
return $res;
} //打印数据
public function p($arr)
{
echo "<pre>";
print_r($arr);
echo "</pre>";
} public function v($arr)
{
echo "<pre>";
var_dump($arr);
echo "</pre>";
} //获得最后一条记录id
public function getInsertid()
{
return mysqli_insert_id($this->link);
} /**
* 查询某个字段
* @param
* @return string or int
*/
public function getOne($sql)
{
$query = $this->query($sql);
return mysqli_free_result($query);
} //获取一行记录,return array 一维数组
public function getRow($sql, $type = "assoc")
{
$query = $this->query($sql);
if (!in_array($type, array("assoc", 'array', "row"))) {
die("mysqli_query error");
}
$funcname = "mysqli_fetch_" . $type;
return $funcname($query);
} //获取一条记录,前置条件通过资源获取一条记录
public function getFormSource($query, $type = "assoc")
{
if (!in_array($type, array("assoc", "array", "row"))) {
die("mysqli_query error");
}
$funcname = "mysqli_fetch_" . $type;
return $funcname($query);
} //获取多条数据,二维数组
public function getAll($sql)
{
$query = $this->query($sql);
$list = array();
while ($r = $this->getFormSource($query)) {
$list[] = $r;
}
return $list;
} /**
* 定义添加数据的方法
* @param string $table 表名
* @param string orarray $data [数据]
* @return int 最新添加的id
*/
public function insert($table, $data)
{
//遍历数组,得到每一个字段和字段的值
$key_str = '';
$v_str = '';
foreach ($data as $key => $v) {
if (empty($v)) {
die("error");
}
//$key的值是每一个字段s一个字段所对应的值
$key_str .= $key . ',';
$v_str .= "'$v',";
}
$key_str = trim($key_str, ',');
$v_str = trim($v_str, ',');
//判断数据是否为空
$sql = "insert into $table ($key_str) values ($v_str)";
$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);
} /**
* [修改操作description]
* @param [type] $table [表名]
* @param [type] $data [数据]
* @param [type] $where [条件]
* @return [type]
*/
public function update($table, $data, $where)
{
//遍历数组,得到每一个字段和字段的值
$str = '';
foreach ($data as $key => $v) {
$str .= "$key='$v',";
}
$str = rtrim($str, ',');
//修改SQL语句
$sql = "update $table set $str where $where";
$this->query($sql);
//返回受影响的行数
return mysqli_affected_rows($this->link);
}
} ?>

  

mysqli DB封装的更多相关文章

  1. php 之mysqli简单封装

    1:DBHelper.class.php <?php class DBHelper{ private $mysqli; private static $host='127.0.0.1'; pri ...

  2. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  3. PHP5 mysqli 教程

    mysqli提供了面向对象和面向过程两种方式来与数据库交互,分别看一下这两种方式. 1.面向对象 在面向对象的方式中,mysqli被封装成一个类,它的构造方法如下: __construct ([ st ...

  4. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

    [转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...

  5. 数据库连接 Mysqli

    //数据库连接 Mysqli $db= new Mysqli("localhost","root","root","asd_808 ...

  6. mysqli实现增删改查(转)

    1.面向对象 在面向对象的方式中,mysqli被封装成一个类,它的构造方法如下: __construct ([ string $host [, string $username [, string $ ...

  7. 测开之路一百三十三:实现sql函数封装

    连接数据库的频率很高,所以把数据库操作封装起来 函数封装: def make_dicts(cursor, row): """ 将游标获取的Tuple根据数据库列表转换为d ...

  8. PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...

  9. PHP适配器模式

    [IDatabase.php] <?php /** * 适配器模式 * 可以将不同的函数接口封装成统一的API * 应用举例1:数据库操作 mysql/mysqli/pdo * 应用举例2:缓存 ...

随机推荐

  1. wsgiref手写一个web服务端

    ''' 通过wsgiref写一个web服务端先讲讲wsgiref吧,基于网络通信其根本就是基于socket,所以wsgiref同样也是通过对socket进行封装,避免写过多的代码,将一系列的操作封装成 ...

  2. php第五节(字符串函数和时间、日期函数)

    <?php //查找字符串函数 // strpos() 查找字符第一次出现的位置 重点区分大小写 //stripos — 查找字符串首次出现的位置(不区分大小写) //strrpos — 计算指 ...

  3. setLocale的一个用处

    setLocale是C库中的一个设置地域化信息的C函数. 函数原型为: char *setlocale(int category, const char *locale) 参数解释: category ...

  4. 19-2-28Python的了解以及变量、常量、数据类型、if语句的结构

    Python目前有两个大版本,一个是2.x版本,一个是3.x版本. Python2x:源码冗余,混乱:且默认ASCII码,只能识别英文字母数字. Python3x:源码整合,美观,清晰,简单.默认ut ...

  5. vue组件中的样式属性--scoped

    Scoped CSS Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当 ...

  6. vue 导出流文件excel

    第一种方法:需要设置响应类型,这里还需要安装 npm install js-file-download --save ,然后引用 var fileDownload = require('js-file ...

  7. PHP计算两个时间戳之间间隔时分秒

    /功能:计算两个时间戳之间相差的日时分秒//$begin_time 开始时间戳//$end_time 结束时间戳function timediff($begin_time,$end_time){ if ...

  8. java中方法的参数传递机制_一个对象被当作参数传递到一个方法后

    一个例子: 在Boy.java类中 在Girl.java类中      在marry方法中的this指的是这个方法所属的对象的引用,在这里指的是girl这个对象 在BoyGirlTest.java测试 ...

  9. IT类职位常用缩写 SA SD RD PG PM DBA MIS QA Sales

    身为IT民工的基本常识,IT类职位常用缩写 SA (System Analyst) 系统分析师 在软体开发团队中,属于中高阶的基层管理者与领导者.除了须具备优秀的文字.语言沟通能力之外,还要有良好的分 ...

  10. 宝塔漏洞 XSS窃取宝塔面板管理员漏洞 高危

    宝塔是近几年刚崛起的一款服务器面板,深受各大站长的喜欢,windows2003 windows2008windosws 2012系统,linux centos deepin debian fedora ...