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操作类库--摘抄

时间: 2024-12-13 16:30:44

mysql操作类库--摘抄的相关文章

ecshop的Mysql操作类

摘要,这是直接摘抄的ecshop的mysql操作类:不过他这里的缓存是用的文件缓存,我们如果想直接使用,可以替换成memcache的或者redis的! <?php /** * ECSHOP MYSQL 公用类库 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利. * 网站地址: http://www.ecsho

php 的mysql操作类

亲自测试,网上其他版本没法用,有很多错误,这是本人亲自测试用的,绝对增删改查都可以. <?php /** * Created by Netbeans. * User: Lugo * Date: 16-7-14 * Version: 1.0.0 * Time: 上午10:50 */ class MysqlHelper { const HOST="localhost"; const DATABASE = "demo"; const ENCODING = "

mysql热备及查询mysql操作日志

mysql热备 1 查看mysql版本,保证主库低于等于从库 2 主库配置:   A 需要打开支持日志功能:log-bin=mysql-bin   B 提供server-id:server-id=1   C 重启mysql,进入后,分配复制从库的帐号 GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'backip' IDENTIFIED BY 'repuser';   D show master status;能看到二进制日志文件目前的Position  

atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结

atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结 1. 常见标准 1 1.1. 录制重放 1 1.2. 一个窗体一个proxy cookie 1 1.3. exec js 1 1.4. js 调用java 1 1.5. 修改dom属性 2 1.6. 关键字驱动 2 1.7. 加载js类库 2 1.8. 一个窗口一个代理 2 1.9. 独立窗口cookie 2 1.10. 无图模式支持 2 1.11. 支持自定义路径 2 2. 框架选型selenium2(web

Python MySql 操作类

Python 2.7 暂时只用到这么多,以后用到其他的再补充. # -*- coding:utf-8 -*- import MySQLdb import time ''' · MySQL 操作类 · V1.0 ''' class MySQLClass(object): def __init__(self,host,user,password,charset="utf8"): super(MySQLClass, self).__init__() self.host=host self.u

HtmlAgilityPack HTML操作类库的使用

1.读取网络中html网页内容,获取网页中元素body内的html,处理所有img元素的src属性后以字符串返回 if (l_sWenBenHtmlFtpPath.Substring(l_sWenBenHtmlFtpPath.LastIndexOf(".") + 1) == "html") { HtmlWeb htmlWeb = new HtmlWeb(); HtmlDocument htmlDoc = htmlWeb.Load(l_sWenBenHtmlFtpPa

php编写mysql操作类

文件:mysql.class.php <?php error_reporting(E_ALL ^ E_DEPRECATED); /* mysql操作类 * 1.连接数据库 * 2.选择需要操作的库 * 3.设置操作的编码 * 4.增删改查 * 查询分两种情况: * 1.查询一条数据:执行一次mysql_fetch_assoc * 2.查询多跳数据:执行多次mysql_fetch_assoc * 5.关闭数据库 */ class mysql { public $hostname; //mysql主

mysql操作时遇到的小问题

mysql数据库在程序中执行sql语句时,或者在执行sql时,数据库表可能会有一些特殊的字符,比如说#,.等,这样在执行时 可能会遇到问题 如以下的表名,backup_2014.2.22, 这个表在查询时会有问题 因为存在这个.的缘故,会报错 table_name="backup_2014.2.22" 如python中写self.db.query("show create table %s" % table_name)[0]会报错 (1064, "You

php中对MYSQL操作之预处理技术(2)数据库dql查询语句

<?php //预处理技术 //创建一个mysqli对象 $mysqli = new MySQLi("主机名","mysql用户名","密码","数据库名"); //判断是否链接成功 if($mysqli->connect_error){ die($mysqli->connect_error); } //创建预编译对象 $sql = "select id,name,age,qq from 表名 wh