<?php

    //DAOMySQLI.class.php

    //完成对mysql数据库操作,单例模式

    //开发类
//1. 定类名
//2. 定成员属性
//3. 定成员方法[查询,dml操作] final class DAOMySQLi{ // 将成员属性以 _开头是一种命名风格. 老外比较喜欢.
//主机名
private $_host;
private $_user;
private $_pwd;
private $_dbname;
private $_port;
private $_charset; //因为我们做成单例
// $_instance : 表示DAOMySQLi 的一个对象实例
private static $_instance; // 有个mysqli连接[对象]
private $_mySQLi; //定构造方法.
//option : 选项
private function __construct(array $option){ //初识化数据库属性
$this->_initOption($option); //初始化_mySQLi属性
$this->_initMySQLi(); } private function _initMySQLi(){ //初始化我们的 _mySQLi
$this->_mySQLi = new MySQLi($this->_host, $this->_user, $this->_pwd, $this->_dbname, $this->_port); if($this->_mySQLi->connect_errno){ die('连接失败 , 错误信息时候' . $this->_mySQLi->connect_error);
} //设置字符集
$this->_mySQLi->set_charset($this->_charset); } //一个函数,用于初始化连接数据库选项
private function _initOption(array $option){ //验证数据
$this->_host = isset($option['host'])? $option['host'] : '';
$this->_user = isset($option['user'])? $option['user'] : '';
$this->_pwd = isset($option['pwd'])? $option['pwd'] : '';
$this->_dbname = isset($option['dbname'])? $option['dbname'] : '';
$this->_port = isset($option['port'])? $option['port'] : '';
$this->_charset = isset($option['charset'])? $option['charset'] : ''; if($this->_host == '' || $this->_user == '' || $this->_pwd == '' || $this->_dbname == '' || $this->_port == '' || $this->_charset == ''){
die('参数传入有误!');
} } //定义一个静态方法 getSingleton..
public static function getSingleton(array $option){ //判断是否已经有对象实例
if(!self::$_instance instanceof self){
//创建一个对象
self::$_instance = new self($option);
}
return self::$_instance;
} //防止克隆
private function __clone(){} //编写一个成员方法,完成对数据表的查询
public function fetchAll($sql){ //定义一个空数组[封装数据]
$arr = array(); if($res = $this->_mySQLi->query($sql)){ //{把 $res 对象返回给调用者
//问题1. 一般情况下,我们程序员希望将$res对象尽快释放.
//解决思路:
//(1)$res ==数据===>$arr
while($row = $res->fetch_assoc()){
$arr[] = $row;
}
//(2)释放$res
$res->free();
//(3)返回数组
return $arr; }else{
//失败
echo '<br> 执行失败 sql语句是' . $sql;
echo '<br> 失败的原因是 ' . $this->_mySQLi->error;
exit;
}
} //编写一个方法,完成对表的dml操作
public function query($sql){ if($this->_mySQLi->query($sql)){ return true;
}else{
//失败
echo '<br> 执行失败 sql语句是' . $sql;
echo '<br> 失败的原因是 ' . $this->_mySQLi->error;
exit;
}
} } ?>

DAOMYSQLI工具类的更多相关文章

  1. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  2. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

  3. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  4. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  5. Guava库介绍之实用工具类

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  6. Java程序员的日常—— Arrays工具类的使用

    这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...

  7. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

  8. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  9. JAVA 日期格式工具类DateUtil.java

    DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.ut ...

随机推荐

  1. Codeforces Round #564 (Div. 2) B. Nauuo and Chess

    链接:https://codeforces.com/contest/1173/problem/B 题意: Nauuo is a girl who loves playing chess. One da ...

  2. js中 前台日期时间使用方法总结

    (1)JQuery EasyUI 1.4.2  版本中的    DateTimeBox(时间日期输入框) 参考本地帮助文档. (2)jquery.datetimepicker   单独使用的包   只 ...

  3. JS filter使用

    filter 用于筛选数组中符合条件的所以元素,filter只能接受函数 注意:filter只返回筛选结果,不会对原来数组改变 实现方法: <html lang="en"&g ...

  4. 【转】pom.xml讲解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. 对fgets末尾'\0'的处理

    之所以要对fgets自动添加的字符进行处理的原因之一是:当你想比较输入的字符时,你会发现输入的字符和源码用来进行对比的字符一模一样,但是使用strcmp比较时就是不一样,原因就是fgets对输入字符添 ...

  6. JavaScript_6_函数

    函数是由事件驱动的或者当它被调用执行的可重复使用的代码块 调用带参数的函数 带有返回值的函数 <!DOCTYPE html> <html> <head> <t ...

  7. Vijos P1243 生产产品 (单调队列优化DP)

    题意: 必须严格按顺序执行M个步骤来生产一个产品,每一个步骤都可以在N台机器中的任何一台完成.机器i完成第j个步骤的时间为T[i][j].把半成品从一台机器上搬到另一台机器上也需要一定的时间K.每台机 ...

  8. 【Python图像特征的音乐序列生成】思路的转变

    关于生成网络这边,可能会做一个深度的受限玻尔兹曼机,这样可以保证生成的音乐不会太相似. 情绪识别网络和生成网络的耦合,中间变量可能直接就是一个one-hot向量,用来标注指定的情绪,不做成坐标那种难以 ...

  9. self & this 上下文

    对象:指向对象的首地址: 函数:代表了函数运行的主要上下文: 内部:在类的内部使用. self Within the body of a class method, self refers to th ...

  10. cv2.threshold 阈值灰度

    threshold函数的使用 图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大 ...