<?php
namespace Lib; // 数据库连接类
class DB {
//私有的属性
private static $dbcon = false;
private $host;
private $port;
private $user;
private $pass;
private $db;
private $charset;
private $link;
//私有的构造方法
private function __construct($config) {
$this->host = $config['host'] ? $config['host'] : 'localhost';
$this->port = $config['port'] ? $config['port'] : '';
$this->user = $config['user'] ? $config['user'] : 'root';
$this->pass = $config['pass'] ? $config['pass'] : '';
$this->db = $config['db'] ? $config['db'] : '';
$this->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($config = null) {
if (self::$dbcon == false) {
self::$dbcon = new self($config);
}
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;
}
//获得最后一条记录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;
} public function selectAll($table, $where, $fields = '*', $order = '', $skip = 0, $limit = 1000) {
if (is_array($where)) {
foreach ($where as $key => $val) {
if (is_numeric($val)) {
$condition = $key . '=' . $val;
} else {
$condition = $key . '=\"' . $val . '\"';
}
}
} else {
$condition = $where;
}
if (!empty($order)) {
$order = " order by " . $order;
}
$sql = "select $fields from $table where $condition $order limit $skip,$limit";
$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, $limit = 0) {
//遍历数组,得到每一个字段和字段的值
$str = '';
foreach ($data as $key => $v) {
$str .= "$key='$v',";
}
$str = rtrim($str, ',');
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;
} if (!empty($limit)) {
$limit = " limit " . $limit;
} else {
$limit = '';
}
//修改SQL语句
$sql = "update $table set $str where $condition $limit";
$this->query($sql);
//返回受影响的行数
return mysqli_affected_rows($this->link);
}
/**
* [获取字段可否为空]
* @param [string] $table [description]
* @return [array] [description]
*/
public function getField_nullable($table) {
$sql = "select COLUMN_NAME,IS_NULLABLE from information_schema.COLUMNS where table_name='$table'";
$res = $this->getAll($sql);
$arr = array();
foreach ($res as $value) {
if ($value['IS_NULLABLE'] == 'NO') {
$arr[$value['COLUMN_NAME']] = false;
continue;
}
$arr[$value['COLUMN_NAME']] = true;
}
return $arr;
}
/**
* [获取字段数据类型]
* @param [string] $table [description]
* @return [array] [description]
*/
public function getField_dataType($table) {
$sql = "select COLUMN_NAME,DATA_TYPE from information_schema.COLUMNS where table_name='$table'";
$res = $this->getAll($sql);
$arr = array();
foreach ($res as $value) {
$arr[$value['COLUMN_NAME']] = $value['DATA_TYPE'];
}
return $arr;
}
}

Mysqli 数据库连接类的更多相关文章

  1. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

  2. JSP 数据库连接类 MySql数据库

    数据库连接类的主要功能是连接数据库并且获得连接对象,以及关闭数据库.通过创建该类的实例,调用其中的方法,以避免重复操作. package chapter13; import java.sql.*; p ...

  3. DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户

    1. DAO简介    DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解    DAO设计模式包括5个重要的部分,分别为数据 ...

  4. 自己写的Python数据库连接类和sql语句拼接方法

    这个工具类十分简单和简洁. sql拼接方法 # encoding=utf-8 from django.http import HttpResponse from anyjson import seri ...

  5. java数据库连接类,已经把数据库操作的方法都封装好了

    在这里分享一个已经封装好了的java数据库连接类,只要创建对象就可以实现数据库的增删改查操作,用过都说好.其实这个不是我自己写的,是一个理解和学习能力超高的朋友写的,他也很乐于分享交流,本人也深受他的 ...

  6. PHP DB 数据库连接类

    近期观看了一节 PHP 消息队列视频,对于讲师WiconWang提供的代码,在此分享一下,希望能对爱学习的小伙伴有所帮助… <?php // 数据库连接类 class DB{ //私有的属性 p ...

  7. mysqli数据库连接

    /* * 连接数据库的mysqli函数库 * 使用的是过程化的风格编码 */header('content-type:text/html;charset=utf-8');// 获取数据库连接$link ...

  8. Mysqli扩展类

    Mysqli 扩展是需要php5.0版本以上的支持 主要有以下的3个类 MySQLi类,基本操作 MySQL_STMT类,预处理操作 MySQLi_RESULT类,结果操作 Mysqli的编写有两种方 ...

  9. PHP单表操作mysqli数据库类的封装

    class DB{ private $options=array( 'database_type' => 'mysql', 'database_name' => 'test', 'serv ...

随机推荐

  1. 测试教程网.unittest教程.6. 命令行接口

    From: http://www.testclass.net/pyunit/commind_line_interface/ 背景 unittest支持命令行接口,我们可以在命令行里指定运行具体的测试用 ...

  2. ALGO-43_蓝桥杯_算法训练_A+B Problem

    问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...

  3. TCP/IP学习20180624

    计算机要互相通信.要有标准. TCP/IP协议,很多协议在一起.所以也叫TCP/IP协议族.经常接触的也就十几种. TCP/IP协议族按层次分为四层: 应用层(最上一层,http,ftp,pop3,i ...

  4. [转][C#]枚举的遍历Enum

    // 加载所有颜色 //foreach (Color item in Enum.GetValues(typeof(Color))) foreach (var item in typeof(Color) ...

  5. Linux创建桥接网络

    图形化创建 #nm-connection-editor & 选择桥接 设置桥接网络 点击添加 模式选择以太网 添加上行网卡 # brctl show 删除桥接 # nmcli connecti ...

  6. 阿里云线上ROS静态路由转发,有大坑。

    原因见上去,阿里云不支持VPC中转流量,VPC1和VPC2都在国内,VPC3在香港,如果按阿里云的做法,必须付费2次国际隧道的钱,才可以实现三个VPC互通.明显很浪费钱. 所以我们只能在三个VPC,各 ...

  7. python面向对象 : 反射和内置方法

    一. 反射 1. isinstance()和issubclass() isinstance( 对象名, 类名) : 判断对象所属关系,包括父类  (注:type(对象名) is 类名 : 判断对象所属 ...

  8. [UE4]枚举Enum和Switch Enum

  9. [UE4]Get Parent,widget获得父容器实例对象

  10. Android ImageView点击效果

    ImageView设置点击效果需要注意两点,第一个设置android:clickable="true",第二个 <item android:drawable="@d ...