DAOMYSQLI工具类
<?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工具类的更多相关文章
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
- [转]Java常用工具类集合
转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...
- .net使用正则表达式校验、匹配字符工具类
开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...
- WebUtils-网络请求工具类
网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...
- JAVA 日期格式工具类DateUtil.java
DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.ut ...
随机推荐
- CF620E New Year Tree 状压+线段树(+dfs序?)
借用学长的活:60种颜色是突破口(我咋不知道QAQ) 好像这几道都是线段树+dfs序??于是你可以把60种颜色压进一个long long 里,然后向上合并的时候与一下(太妙了~) 所以记得开long ...
- Netty(7)-传对象
改造timer,即客户端与服务端建立连接后,服务端主动向客户端发送当前时间. server: ch.pipeline().addLast(new TimeEncoder()); ch.pipeline ...
- AspnetCore 2.0
AspnetCore 2.0 本文地址 http://www.cnblogs.com/likeli/p/8204054.html 关于 API文档自动生成,用于对APP端的开发帮助文档生成,默认Pro ...
- C++ 11 Lambda表达式!!!!!!!!!!!
C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可以方便的定义和创建匿名函数.对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多 ...
- Django使用网站图标
默认情况下,浏览器访问一个网站的时候,同时还会向服务器请求“/favicon.ico”这个URL,目的是获取网站的图标. 若是没有配置的话,Django就会返回一个404错误,并且浏览器接收到这个40 ...
- ruby 数组 Hash相互转换
由[索引, 值, ...] 型的数组变为哈希表 ary = [1,"a", 2,"b", 3,"c"] p Hash[*ary] # =&g ...
- autofac 注入生命周期
创建实例方法 1.InstancePerDependency 对每一个依赖或每一次调用创建一个新的唯一的实例.这也是默认的创建实例的方式. 官方文档解释:Configure the component ...
- 关于下载文件封装的两个类(Mars)
首先是文件FileUtils.java package mars.utils; import java.io.File; import java.io.FileOutputStream; import ...
- WebView全面学习(二)-- Native与js双方通信
WebView全面学习(二)-- Native与js双方通信 Native与js通信的本质 Native与js通信的核心在于WebView. 两端的通信主要还是单向的.假如要完成js->Nati ...
- jenkins只能同时构建2个Job怎么办?
在jenkins 构建任务时,同时只能构建2个,如果两个没有job没有结束,构建第3个就会不执行: 提示: pending—Waiting for next available executor on ...