<?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. VBScript Scripting Techniques: File Open Dialog http://www.robvanderwoude.com/vbstech_ui_fileopen.php

    I accept cookies This website uses cookies to ensure you get the best experience on our website More ...

  2. Zipkin和Brave实现http服务调用的跟踪

    使用Zipkin和Brave实现http服务调用的跟踪,Brave 是用来装备Java程序的类库,提供了面向标准Servlet.Spring MVC.Http Client.JAX RS.Jersey ...

  3. R语言 实验三 数据探索和预处理

    计算缺失值个数 计算缺失率   简单统计量:计算最值     箱形图分析   分布分析:画出频率直方图 统计量分析:对于连续属性值,求出均值以及标准差         缺失值处理:删除法     去除 ...

  4. 学习笔记之Anaconda / PyCharm

    Anaconda https://www.anaconda.com/ The Most Popular Python Data Science Platform Getting started wit ...

  5. WordPress设置地址的问题

    刚刚安装了一个Wordpress,第一次使用,所以对设置不是很熟悉. 在常规设置那里,有两个地址设置,一个是WordPress 地址(URL),另一个是站点地址(URL),刚开始分不清这两个的区别,所 ...

  6. 自定义锁屏图片 win7

    win + R打开运行对话框 输入Regedit 点确定 进入注册表,找到以下项次 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersi ...

  7. Android 通过联系人姓名查询联系人号码

    <!-- 读联系人权限 --><uses-permission android:name="android.permission.READ_CONTACTS" / ...

  8. 在Docker中安装配置Oracle11g并实现数据持久化

    1.拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 镜像详情:https://dev.aliyun.com/ ...

  9. Linux聚合网络

    Linux聚合网络 作者:Eric 微信:loveoracle11g 链路聚合 [root@server1 ~]# ifconfig | grep eno [root@server1 ~]# ls / ...

  10. SAS 宏数据运算

    74 /*计算两个日期之间间隔多少天:开始时间01DEC2005 结束日期:31JUL2018*/75 %LET N2='31JUL2018'D-'01DEC2005'D+1;76 %PUT & ...