mysql操作类库--摘抄
- <!--?php
- /**
- +----------------------------------
- * MySQL操作类库
- +----------------------------------
- * @author 马犇 <www.imaben.com-->
- +----------------------------------
- * @version 1.2 (2013-5-31)
- +----------------------------------
- */
- include (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.php');
- define('CLIENT_MULTI_RESULTS', 131072);
- class mysql {
- /* 主机地址 */
- private $Host = '127.0.0.1';
- /* 数据库名称 */
- private $dbName = DB_NAME;
- /* 用户名 */
- private $UserName = DB_USER;
- /* 连接密码 */
- private $Password = DB_PWD;
- /* 数据库编码 */
- private $dbCharSet = 'utf8';
- /* 错误信息 */
- private $errorMsg;
- /* 最后一次执行的SQL */
- private $lastSql;
- /* 字段信息 */
- private $fields = array();
- /* 最后一次插入的ID */
- public $lastInsID = null;
- /* 数据库连接ID */
- private $linkID = 0;
- /* 当前查询ID */
- private $queryID = null;
- /*主键*/
- private $pk = null;
- public function __construct($DBName = '') {
- if ($DBName != '')
- $this->dbName = $DBName;
- $this->connect();
- }
- /**
- +----------------------------------------------------------
- * 连接数据库方法
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function connect() {
- if ($this->linkID == 0) {
- $this->linkID = mysql_connect($this->Host, $this->UserName, $this->Password, true, CLIENT_MULTI_RESULTS);
- if (!$this->linkID) {
- $this->errorMsg = '数据库连接错误\r\n' . mysql_error();
- $this->halt();
- }
- }
- if (!mysql_select_db($this->dbName, $this->linkID)) {
- $this->errorMsg = '打开数据库失败' . mysql_error($this->linkID);
- $this->halt('打开数据库失败');
- }
- $dbVersion = mysql_get_server_info($this->linkID);
- if ($dbVersion >= "4.1") {
- //使用UTF8存取数据库 需要mysql 4.1.0以上支持
- mysql_query("SET NAMES '" . $this->dbCharSet . "'", $this->linkID);
- }
- //设置CharSet
- mysql_query('set character set \'' . $this->dbCharSet . '\'', $this->linkID);
- //设置 sql_model
- if ($dbVersion > '5.0.1') {
- mysql_query("SET sql_mode=''", $this->linkID);
- }
- }
- /**
- +----------------------------------------------------------
- * 释放查询结果
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function free() {
- if($this->queryID != null)
- mysql_free_result($this->queryID);
- $this->queryID = null;
- }
- /**
- +----------------------------------------------------------
- * 执行语句
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $sql sql指令
- +----------------------------------------------------------
- * @return bool or resource
- +----------------------------------------------------------
- */
- public function execute($sql) {
- if ($this->linkID == 0)
- $this->connect();
- $this->lastSql = $sql;
- $this->queryID = mysql_query($sql);
- if (false == $this->queryID) {
- $this->errorMsg = 'SQL语句执行失败\r\n' . mysql_error($this->linkID);
- return false;
- } else {
- return $this->queryID;
- }
- }
- /**
- +----------------------------------------------------------
- * 获取记录集的行数
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $sql sql指令 可为空
- * 如为空:返回上一结果集记录数
- * 如不为空:返回当前sql语句的记录数
- +----------------------------------------------------------
- * @return integer
- +----------------------------------------------------------
- */
- public function getRowsNum($sql = '') {
- if ($this->linkID == 0) {
- $this->connect();
- }
- if ($sql != '') {
- $this->execute($sql);
- }
- return mysql_num_rows($this->queryID);
- }
- /**
- +----------------------------------------------------------
- * 表单数据直接插入到数据表中
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $tableName 数据表名
- +----------------------------------------------------------
- * @return 执行成功返回插入记录的索引记录,失败返回false
- +----------------------------------------------------------
- */
- public function form2db($tableName) {
- $_POST["add_time"] = date('Y-m-d H:i:s');
- $data = $_POST;
- $this->fields = $this->getFields($tableName);
- $data = $this->_facade($data);
- if ($this->insert($tableName, $data)) {
- return $this->lastInsID;
- } else {
- return false;
- }
- }
- /**
- +----------------------------------------------------------
- * 数据直接插入到数据表中
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $tableName 数据表名
- +----------------------------------------------------------
- * @param array $data 插入的数据 数据键名对应字段名,键值对应值
- +----------------------------------------------------------
- * @return boolean
- +----------------------------------------------------------
- */
- public function insert($tableName, $data) {
- $values = $fields = array();
- foreach ($data as $key => $val) {
- $value = '\'' . addslashes($val) . '\'';
- if (is_scalar($value)) { // 过滤非标量数据
- $values[] = $value;
- $fields[] = $key;
- }
- }
- $sql = 'INSERT INTO ' . trim($tableName) . '(' . implode(',', $fields) . ') VALUES(' . implode(',', $values) . ')';
- if ($this->execute($sql)) {
- $this->errorMsg = '插入失败\r\n' . mysql_error($this->linkID);
- $this->lastInsID = mysql_insert_id($this->linkID);
- return true;
- } else {
- return false;
- }
- }
- /**
- +----------------------------------------------------------
- * 更新操作
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $tableName 数据表名
- +----------------------------------------------------------
- * @param array $data 插入的数据 数据键名对应字段名,键值对应值
- +----------------------------------------------------------
- * @param array $condition 更新条件,为安全起见,不能为空
- +----------------------------------------------------------
- * @param array $isForm 可为空,缺省为true
- * 如果为true,会当成表单更新数据表来处理,自动映射字段
- * 如果为false,会当成普通的更新来处理,不会自动映射字段
- +----------------------------------------------------------
- * @return boolean
- +----------------------------------------------------------
- */
- public function update($tableName, $data, $condition, $isForm = true) {
- if (empty($condition)) {
- $this->errorMsg = '没有设置更新条件';
- return false;
- }
- //处理分解condition
- if(is_array($condition)){
- $condition = self::_parseCondition($condition);
- }
- if ($isForm) {
- $this->fields = $this->getFields($tableName);
- $data = $this->_facade($data);
- }
- $sql = 'UPDATE ' . trim($tableName) . ' SET ';
- foreach ($data as $key => $val) {
- $sql .= $key . '=\'' . $val . '\',';
- }
- $sql = substr($sql, 0, strlen($sql) - 1);
- $sql .= ' WHERE ' . $condition;
- if ($this->execute($sql)) {
- return true;
- } else {
- $this->errorMsg = '更新失败\r\n' . mysql_error($this->linkID);
- return false;
- }
- }
- /**
- +----------------------------------------------------------
- * 删除操作
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $tableName 数据表名
- +----------------------------------------------------------
- * @param array $condition 更新条件,为安全起见,不能为空
- +----------------------------------------------------------
- * @return boolean
- +----------------------------------------------------------
- */
- public function delete($tableName, $condition) {
- //处理分解condition
- if(is_array($condition)){
- $condition = self::_parseCondition($condition);
- }
- $sql = 'delete from ' . $tableName . ' where 1=1 and ' . $condition;
- if (!$this->execute($sql))
- return false;
- return true;
- }
- /**
- +----------------------------------------------------------
- * 利用__call魔术方法实现一些特殊的Model方法
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $method 方法名称
- * @param array $args 调用参数
- +----------------------------------------------------------
- * @return mixed
- +----------------------------------------------------------
- */
- public function __call($method,$args){
- /*根据某个字段获取记录字段的值
- * 例1:getFieldByid(student_info,100,name)---获取学生表中id为100的学生姓名
- * 例2:getFieldByxh(student_info,201215030223,address)---获取学生表中学号为201015030223的地址
- * 注:"getFieldBy"不区分大小写,后面的字段名区分大小写
- * 返回值:string
- */
- if(strtolower(substr($method,0,10)) == 'getfieldby'){
- $name = substr($method,10);
- $sql = 'select `'.$args[2].'` from '.$args[0].' where '.$name.'=\''.$args[1].'\'';
- if($this->execute($sql)){
- $row = mysql_fetch_array($this->queryID);
- return $row[0];
- }else{
- return false;
- }
- }
- /*根据某个字段和值获取某条记录
- * 例1:getByid(student_info,100)---获取学生表中id为100的学生信息
- * 例2:getByxh(student_info,201215030223)---获取学生表中学号为201015030223的学生信息
- * 注:"getBy"不区分大小写,后面的字段名区分大小写
- * 返回值:array
- */
- elseif(strtolower(substr($method,0,5)) == 'getby'){
- $ret = array();
- $name = substr($method,5);
- $sql = 'select * from '.$args[0].' where '.$name.'=\''.$args[1].'\'';
- if($this->execute($sql)){
- $row = mysql_fetch_array($this->queryID);
- return $row;
- }else{
- return false;
- }
- }
- }
- /**
- +----------------------------------------------------------
- * 弹出错误提示,并终止运行
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param string $msg 错误消息,可为空
- +----------------------------------------------------------
- */
- public static function halt($msg = '') {
- if ($msg != '') {
- $msg .= '\r\n';
- }
- $error = mysql_error();
- die($msg);
- }
- /**
- +----------------------------------------------------------
- * 获取最后一次查询ID
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function getQueryId(){
- return $this->queryID;
- }
- /**
- +----------------------------------------------------------
- * 获取最后一次数据库操作错误信息
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function getLastError() {
- return $this->errorMsg;
- }
- /**
- +----------------------------------------------------------
- * 获取最后一次执行的SQL语句
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function getLastSql() {
- return $this->lastSql;
- }
- /**
- +----------------------------------------------------------
- * 获取最后一次插入数据库记录的索引ID号
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function getLastInsID() {
- return $this->lastInsID;
- }
- /**
- +----------------------------------------------------------
- * 获取上一次操作影响的行数
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function getAffectedRows() {
- return mysql_affected_rows($this->linkID);
- }
- /**
- +----------------------------------------------------------
- * 取得数据表的字段信息
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- */
- public function getFields($tableName) {
- $result = array();
- $this->execute('SHOW COLUMNS FROM ' . $this->parseKey($tableName));
- while ($row = mysql_fetch_array($this->queryID)) {
- $result[] = $row;
- }
- $info = array();
- if ($result) {
- foreach ($result as $key => $val) {
- $info[$val['Field']] = array(
- 'name' => $val['Field'],
- 'type' => $val['Type'],
- 'notnull' => (bool) ($val['Null'] === ''), // not null is empty, null is yes
- 'default' => $val['Default'],
- 'primary' => (strtolower($val['Key']) == 'pri'),
- 'autoinc' => (strtolower($val['Extra']) == 'auto_increment'),
- );
- }
- }
- return $info;
- }
- /**
- +----------------------------------------------------------
- * 字段和表名处理添加`
- +----------------------------------------------------------
- * @access protected
- +----------------------------------------------------------
- * @param string $key
- +----------------------------------------------------------
- * @return string
- +----------------------------------------------------------
- */
- protected function parseKey(&$key) {
- $key = trim($key);
- if (false !== strpos($key, ' ') || false !== strpos($key, ',') || false !== strpos($key, '*') || false !== strpos($key, '(') || false !== strpos($key, '.') || false !== strpos($key, '`')) {
- //如果包含* 或者 使用了sql方法 则不作处理
- } else {
- $key = '`' . $key . '`';
- }
- return $key;
- }
- /**
- +----------------------------------------------------------
- * 对保存到数据库的数据进行处理
- +----------------------------------------------------------
- * @access protected
- +----------------------------------------------------------
- * @param mixed $data 要操作的数据
- +----------------------------------------------------------
- * @return boolean
- +----------------------------------------------------------
- */
- private function _facade($data) {
- // 检查非数据字段
- if (!empty($this->fields)) {
- foreach ($data as $key => $val) {
- if (!array_key_exists($key, $this->fields)) {
- unset($data[$key]);
- }
- }
- }
- return $data;
- }
- public function close(){
- mysql_close($this->linkID);
- }
- public function __destruct(){
- $this->close();
- }
- /*
- ** 2013.5.25新增
- */
- public function getPk($table){
- //将pk置为空
- $this->pk = null;
- $result = $this->getFields($table);
- foreach($result as $key => $val){
- if($val['primary']){
- $this->pk = $key;
- break;
- }
- }
- return $this->pk;
- }
- public function fetch(&$rst = null , $array_type = MYSQL_ASSOC){
- if($rst == null){
- $rst = $this->queryID;
- }
- if($this->queryID)
- return mysql_fetch_array($rst , $array_type);
- else
- return false;
- }
- //分解条件
- private function _parseCondition($condition , $operator='AND'){
- $return = '';
- if (is_array($condition)) {
- $index = 0;
- foreach ($condition as $key => $value) {
- if ($index) {
- $return .= " ".$operator;
- }
- $return .= "`{$key}`='{$value}'";
- $index++;
- }
- return $return;
- }else{
- return false;
- }
- }
- /*事务处理开始*/
- public function beginTransaction(){
- $this->execute("START TRANSACTION");
- }
- public function commit(){
- $this->execute("COMMIT");
- }
- public function rollback(){
- $this->execute("ROLLBACK");
- }
- /*事务处理结束*/
- //根据条件查找一条记录
- public function find($table,$condition = null,$field = null){
- if(is_array($condition)){
- $condition = self::_parseCondition($condition);
- }
- //处理condition和field
- $condition = $condition == null ? null : (is_array($condition) ? self::_parseCondition($condition) : $condition);
- $field = $field == null ? '*' : (is_array($field) ? implode(",",$field) : $field);
- $sql = 'SELECT ' . $field . ' FROM '.$table;
- if($condition != null){
- $sql .= " WHERE " . $condition;
- }
- return $this->findOneBySql($sql);
- }
- //查找所有记录
- public function findAll($table,$condition = null,$field = null){
- if(is_array($condition)){
- $condition = self::_parseCondition($condition);
- }
- //处理condition和field
- $condition = $condition == null ? null : (is_array($condition) ? self::_parseCondition($condition) : $condition);
- $field = $field == null ? '*' : (is_array($field) ? implode(",",$field) : $field);
- $sql = 'SELECT ' . $field . ' FROM '.$table;
- if($condition != null){
- $sql .= " WHERE " . $condition;
- }
- return $this->findallBySql($sql);
- }
- public function findOneBySql($sql){
- $sql .= " LIMIT 1";
- $this->execute($sql);
- return $this->fetch();
- }
- public function findAllBySql($sql){
- $rows = array();
- $this->execute($sql);
- while($row = $this->fetch()){
- $rows[] = $row;
- }
- return $rows;
- }
- public function findByPk($table,$_pk){
- $pk = $this->getPk($table);
- if($pk == null){
- $this->errorMsg = "未找到该表的主键";
- return false;
- }else{
- return $this->find($table,array(
- $pk => $_pk
- ));
- }
- }
- public function deleteByPk($table,$_pk){
- $pk = $this->getPk($table);
- if($pk == null){
- $this->errorMsg = "未找到该表的主键";
- return false;
- }else{
- $sql = "DELETE FROM ".$table." WHERE `{$pk}`='{$_pk}'";
- return $this->delete($table,array(
- $pk => $_pk
- ));
- }
- }
- }
- /*
- * 类库更新日志 2013.5.25
- * 1、update delete操作中的条件可以设置为数组形式$key=>$value
- * 2、增加事务处理功能(只针对innodb引擎)
- * 3、增加根据条件查找一条记录
- * 4、增加根据条件查找所有记录
- * 5、增加根据主键查找记录
- * 6、增加根据主键删除记录
- */
- ?>
mysql操作类库--摘抄的更多相关文章
- ecshop的Mysql操作类
摘要,这是直接摘抄的ecshop的mysql操作类:不过他这里的缓存是用的文件缓存,我们如果想直接使用,可以替换成memcache的或者redis的! <?php /** * ECSHOP MY ...
- Mysql操作初级
Mysql操作初级 本节内容 数据库概述 数据库安装 数据库操作 数据表操作 表内容操作 1.数据库概述 数据库管理系统叫做DBMS 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建 ...
- python学习道路(day12note)(mysql操作,python链接mysql,redis)
1,针对mysql操作 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 设置密码 update user set password ...
- 学习笔记:MySQL操作初步
对数据库的操作:SQL语言 一:SQL:Structured Query Language,结构化查询语言! 二:DDL:Data Definition Language,数据定义语言 三:DML:D ...
- shell执行mysql操作
http://ully.iteye.com/blog/1226494 http://www.jb51.net/article/55207.htm shell执行mysql操作 mysql -hhos ...
- 第一篇:Mysql操作初级
Mysql操作初级 Mysql操作初级 本节内容 数据库概述 数据库安装 数据库操作 数据表操作 表内容操作 1.数据库概述 数据库管理系统叫做DBMS 1.什么是数据库 ? 答:数据的仓库,如: ...
- Mysql 操作手册
mysql操作手册 版本:5.6.16mysql linux安装基本步骤:#rpm -e --nodeps mysql-lib-5.1.*#rpm -ivh mysql-server#rpm -ivh ...
- Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作
Mysql操作: grant select,insert,update,delete on *.* to root@"%" Identified by "123456&q ...
- FtpHelper ftp操作类库
FtpHelper ftp操作类库 using System; using System.Collections.Generic; using System.Linq; using System.Te ...
随机推荐
- wp8 入门到精通 线程
Dispatcher.BeginInvoke(() => MessageBox.Show(String.Format("A push notification {0} error oc ...
- Android项目环境搭建
安装步骤: ① 安装JDK1.6 在Windows上配置Java环境变量 # JAVA_HOME(C:\Program Files\Java\jdk1.6.0_06),Path(C:\Prog ...
- BestCoder 1st Anniversary B.Hidden String DFS
B. Hidden String Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/co ...
- zookeeper 4 letter 描述与实践
命令示例描述 Conf echo conf | nc localhost 2181 (New in 3.3.0)输出相关服务配置的详细信息.比如端口.zk数据及日志配置路径.最大连接数,session ...
- Dialog对话框
1.显示内容 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle(&q ...
- IE下Checkbox标签的onchange事件兼容
Checkbox onchange事件在谷歌上ok,在ie8上不起作用了. 一番周折,测试发现勾选了以后还要点击其他位置才会触发onchange事件. 用度娘查询了一下. 有下面两种解决方式: 用on ...
- Xamarin.Android模拟器提示HAX kernel module is not Installed
Xamarin.Android模拟器提示HAX kernel module is not Installed 错误信息:emulator : ERROR : x86 emulation current ...
- 简单几何(求交点) UVA 11437 Triangle Fun
题目传送门 题意:三角形三等分点连线组成的三角形面积 分析:入门题,先求三等分点,再求交点,最后求面积.还可以用梅涅劳斯定理来做 /********************************** ...
- 三十分钟掌握STL
这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有所收获,那么赶紧扔了 ...
- Spark Streaming实时计算框架介绍
随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架MapReduce适合离线计算,却无法满足实时性要求较高的业务,如实时推荐.用户行为分析等. Spark Streaming是建立在 ...