Maison php教程 php手册 mysql操作类库1.2

mysql操作类库1.2

Jun 06, 2016 pm 08:09 PM
mysql 操作 changement Bibliothèque de classe

又经过了一次小的改动,现把最新版发出来: ?php/** +---------------------------------- * MySQL操作类库 +---------------------------------- * @author 马犇 +---------------------------------- * @version 1.2 (2013-5-31) +-----------------------

又经过了一次小的改动,现把最新版发出来:

<?php /**
  +----------------------------------
 * MySQL操作类库
  +----------------------------------
 * @author    马犇 
  +----------------------------------
 * @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、增加根据主键删除记录
 */
?>
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD
Musée à deux points: toutes les expositions et où les trouver
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Compétences de traitement de structures de données volumineuses de PHP Compétences de traitement de structures de données volumineuses de PHP May 08, 2024 am 10:24 AM

Compétences en matière de traitement de la structure des Big Data : Chunking : décomposez l'ensemble de données et traitez-le en morceaux pour réduire la consommation de mémoire. Générateur : générez des éléments de données un par un sans charger l'intégralité de l'ensemble de données, adapté à des ensembles de données illimités. Streaming : lisez des fichiers ou interrogez les résultats ligne par ligne, adapté aux fichiers volumineux ou aux données distantes. Stockage externe : pour les ensembles de données très volumineux, stockez les données dans une base de données ou NoSQL.

Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Jun 03, 2024 pm 12:19 PM

La sauvegarde et la restauration d'une base de données MySQL en PHP peuvent être réalisées en suivant ces étapes : Sauvegarder la base de données : Utilisez la commande mysqldump pour vider la base de données dans un fichier SQL. Restaurer la base de données : utilisez la commande mysql pour restaurer la base de données à partir de fichiers SQL.

Comment optimiser les performances des requêtes MySQL en PHP ? Comment optimiser les performances des requêtes MySQL en PHP ? Jun 03, 2024 pm 08:11 PM

Les performances des requêtes MySQL peuvent être optimisées en créant des index qui réduisent le temps de recherche d'une complexité linéaire à une complexité logarithmique. Utilisez PreparedStatements pour empêcher l’injection SQL et améliorer les performances des requêtes. Limitez les résultats des requêtes et réduisez la quantité de données traitées par le serveur. Optimisez les requêtes de jointure, notamment en utilisant des types de jointure appropriés, en créant des index et en envisageant l'utilisation de sous-requêtes. Analyser les requêtes pour identifier les goulots d'étranglement ; utiliser la mise en cache pour réduire la charge de la base de données ; optimiser le code PHP afin de minimiser les frais généraux.

Comment insérer des données dans une table MySQL en utilisant PHP ? Comment insérer des données dans une table MySQL en utilisant PHP ? Jun 02, 2024 pm 02:26 PM

Comment insérer des données dans une table MySQL ? Connectez-vous à la base de données : utilisez mysqli pour établir une connexion à la base de données. Préparez la requête SQL : Écrivez une instruction INSERT pour spécifier les colonnes et les valeurs à insérer. Exécuter la requête : utilisez la méthode query() pour exécuter la requête d'insertion en cas de succès, un message de confirmation sera généré.

Comment créer une table MySQL en utilisant PHP ? Comment créer une table MySQL en utilisant PHP ? Jun 04, 2024 pm 01:57 PM

La création d'une table MySQL à l'aide de PHP nécessite les étapes suivantes : Connectez-vous à la base de données. Créez la base de données si elle n'existe pas. Sélectionnez une base de données. Créer un tableau. Exécutez la requête. Fermez la connexion.

Comment utiliser les procédures stockées MySQL en PHP ? Comment utiliser les procédures stockées MySQL en PHP ? Jun 02, 2024 pm 02:13 PM

Pour utiliser les procédures stockées MySQL en PHP : Utilisez PDO ou l'extension MySQLi pour vous connecter à une base de données MySQL. Préparez l'instruction pour appeler la procédure stockée. Exécutez la procédure stockée. Traitez le jeu de résultats (si la procédure stockée renvoie des résultats). Fermez la connexion à la base de données.

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

La différence entre la base de données Oracle et MySQL La différence entre la base de données Oracle et MySQL May 10, 2024 am 01:54 AM

La base de données Oracle et MySQL sont toutes deux des bases de données basées sur le modèle relationnel, mais Oracle est supérieur en termes de compatibilité, d'évolutivité, de types de données et de sécurité ; tandis que MySQL se concentre sur la vitesse et la flexibilité et est plus adapté aux ensembles de données de petite et moyenne taille. ① Oracle propose une large gamme de types de données, ② fournit des fonctionnalités de sécurité avancées, ③ convient aux applications de niveau entreprise ; ① MySQL prend en charge les types de données NoSQL, ② a moins de mesures de sécurité et ③ convient aux applications de petite et moyenne taille.

See all articles