PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php封装的mysqli类完整实例

管理员 2025-03-26
工作总结
43

下面是一个完整的基于 MySQLi 扩展封装的数据库操作类,包含常用的数据库操作方法。

完整代码实现

php
复制
<?php/**
 * MySQLi 数据库操作封装类
 */class MySQLiDB{
    // MySQLi 连接对象
    private $conn;
    
    // 数据库配置
    private $config = array(
        'host'     => 'localhost',
        'port'     => 3306,
        'user'     => 'root',
        'password' => '',
        'dbname'   => 'test',
        'charset'  => 'utf8mb4'
    );
    
    // 查询结果
    private $result;
    
    // 最后执行的SQL
    private $lastSql = '';
    
    // 最后插入ID
    private $lastInsertId = 0;
    
    // 影响行数
    private $affectedRows = 0;
    
    // 错误信息
    private $error = '';
    
    /**
     * 构造函数
     * @param array $config 数据库配置
     */
    public function __construct($config = array())
    {
        // 合并配置
        if (!empty($config)) {
            $this->config = array_merge($this->config, $config);
        }
        
        // 连接数据库
        $this->connect();
    }
    
    /**
     * 连接数据库
     */
    private function connect()
    {
        $this->conn = new mysqli(
            $this->config['host'],
            $this->config['user'],
            $this->config['password'],
            $this->config['dbname'],
            $this->config['port']
        );
        
        // 检查连接
        if ($this->conn->connect_error) {
            die("数据库连接失败: " . $this->conn->connect_error);
        }
        
        // 设置字符集
        $this->conn->set_charset($this->config['charset']);
    }
    
    /**
     * 执行SQL查询
     * @param string $sql SQL语句
     * @param array $params 绑定参数
     * @return bool|mysqli_result
     */
    public function query($sql, $params = array())
    {
        $this->lastSql = $sql;
        $this->error = '';
        
        // 预处理SQL
        $stmt = $this->conn->prepare($sql);
        if (!$stmt) {
            $this->error = $this->conn->error;
            return false;
        }
        
        // 绑定参数
        if (!empty($params)) {
            $types = '';
            $bindParams = array();
            
            foreach ($params as $param) {
                if (is_int($param)) {
                    $types .= 'i'; // 整数
                } elseif (is_float($param)) {
                    $types .= 'd'; // 浮点数
                } else {
                    $types .= 's'; // 字符串
                }
                $bindParams[] = $param;
            }
            
            array_unshift($bindParams, $types);
            call_user_func_array(array($stmt, 'bind_param'), $this->refValues($bindParams));
        }
        
        // 执行查询
        if (!$stmt->execute()) {
            $this->error = $stmt->error;
            return false;
        }
        
        // 获取结果
        $this->result = $stmt->get_result();
        $this->affectedRows = $stmt->affected_rows;
        
        // 如果是INSERT操作,获取最后插入ID
        if (preg_match('/^\s*INSERT\s+/i', $sql)) {
            $this->lastInsertId = $stmt->insert_id;
        }
        
        $stmt->close();
        
        return $this->result;
    }
    
    /**
     * 获取单条记录
     * @param string $sql SQL语句
     * @param array $params 绑定参数
     * @return array|bool
     */
    public function getOne($sql, $params = array())
    {
        $result = $this->query($sql, $params);
        if (!$result) {
            return false;
        }
        return $result->fetch_assoc();
    }
    
    /**
     * 获取多条记录
     * @param string $sql SQL语句
     * @param array $params 绑定参数
     * @return array|bool
     */
    public function getAll($sql, $params = array())
    {
        $result = $this->query($sql, $params);
        if (!$result) {
            return false;
        }
        
        $rows = array();
        while ($row = $result->fetch_assoc()) {
            $rows[] = $row;
        }
        
        return $rows;
    }
    
    /**
     * 获取单个字段值
     * @param string $sql SQL语句
     * @param array $params 绑定参数
     * @return mixed|bool
     */
    public function getScalar($sql, $params = array())
    {
        $result = $this->query($sql, $params);
        if (!$result || !$result->num_rows) {
            return false;
        }
        
        $row = $result->fetch_row();
        return $row[0];
    }
    
    /**
     * 插入数据
     * @param string $table 表名
     * @param array $data 数据数组
     * @return bool|int 插入ID或false
     */
    public function insert($table, $data)
    {
        if (empty($table) || empty($data)) {
            return false;
        }
        
        $fields = array();
        $values = array();
        $placeholders = array();
        
        foreach ($data as $field => $value) {
            $fields[] = "`$field`";
            $placeholders[] = '?';
            $values[] = $value;
        }
        
        $sql = "INSERT INTO `$table` (" . implode(', ', $fields) . ") 
                VALUES (" . implode(', ', $placeholders) . ")";
        
        if ($this->query($sql, $values)) {
            return $this->lastInsertId;
        }
        
        return false;
    }
    
    /**
     * 更新数据
     * @param string $table 表名
     * @param array $data 数据数组
     * @param string $where WHERE条件
     * @param array $whereParams WHERE参数
     * @return bool|int 影响行数或false
     */
    public function update($table, $data, $where = '', $whereParams = array())
    {
        if (empty($table) || empty($data)) {
            return false;
        }
        
        $set = array();
        $values = array();
        
        foreach ($data as $field => $value) {
            $set[] = "`$field` = ?";
            $values[] = $value;
        }
        
        $sql = "UPDATE `$table` SET " . implode(', ', $set);
        
        if (!empty($where)) {
            $sql .= " WHERE $where";
            $values = array_merge($values, $whereParams);
        }
        
        if ($this->query($sql, $values)) {
            return $this->affectedRows;
        }
        
        return false;
    }
    
    /**
     * 删除数据
     * @param string $table 表名
     * @param string $where WHERE条件
     * @param array $whereParams WHERE参数
     * @return bool|int 影响行数或false
     */
    public function delete($table, $where = '', $whereParams = array())
    {
        if (empty($table)) {
            return false;
        }
        
        $sql = "DELETE FROM `$table`";
        
        if (!empty($where)) {
            $sql .= " WHERE $where";
        }
        
        if ($this->query($sql, $whereParams)) {
            return $this->affectedRows;
        }
        
        return false;
    }
    
    /**
     * 开启事务
     * @return bool
     */
    public function beginTransaction()
    {
        return $this->conn->autocommit(false);
    }
    
    /**
     * 提交事务
     * @return bool
     */
    public function commit()
    {
        $result = $this->conn->commit();
        $this->conn->autocommit(true);
        return $result;
    }
    
    /**
     * 回滚事务
     * @return bool
     */
    public function rollBack()
    {
        $result = $this->conn->rollback();
        $this->conn->autocommit(true);
        return $result;
    }
    
    /**
     * 获取最后插入ID
     * @return int
     */
    public function getLastInsertId()
    {
        return $this->lastInsertId;
    }
    
    /**
     * 获取影响行数
     * @return int
     */
    public function getAffectedRows()
    {
        return $this->affectedRows;
    }
    
    /**
     * 获取错误信息
     * @return string
     */
    public function getError()
    {
        return $this->error;
    }
    
    /**
     * 获取最后执行的SQL
     * @return string
     */
    public function getLastSql()
    {
        return $this->lastSql;
    }
    
    /**
     * 引用传递参数
     * @param array $arr
     * @return array
     */
    private function refValues($arr)
    {
        $refs = array();
        foreach ($arr as $key => $value) {
            $refs[$key] = &$arr[$key];
        }
        return $refs;
    }
    
    /**
     * 析构函数
     */
    public function __destruct()
    {
        if ($this->conn) {
            $this->conn->close();
        }
    }}

使用示例

php
复制
<?php// 引入MySQLiDB类require_once 'MySQLiDB.php';// 配置数据库连接$config = array(
    'host'     => '127.0.0.1',
    'user'     => 'root',
    'password' => '123456',
    'dbname'   => 'test_db',
    'charset'  => 'utf8mb4');// 实例化数据库类$db = new MySQLiDB($config);// 1. 查询单条记录$user = $db->getOne("SELECT * FROM users WHERE id = ?", [1]);print_r($user);// 2. 查询多条记录$users = $db->getAll("SELECT * FROM users WHERE status = ?", [1]);print_r($users);// 3. 查询单个值$count = $db->getScalar("SELECT COUNT(*) FROM users");echo "用户总数: $count\n";// 4. 插入数据$insertId = $db->insert('users', [
    'username' => 'testuser',
    'email'    => 'test@example.com',
    'password' => password_hash('123456', PASSWORD_DEFAULT)]);echo "插入ID: $insertId\n";// 5. 更新数据$affectedRows = $db->update('users', 
    ['status' => 0], 
    'id = ?', 
    [1]);echo "影响行数: $affectedRows\n";// 6. 删除数据$affectedRows = $db->delete('users', 'id = ?', [2]);echo "删除行数: $affectedRows\n";// 7. 事务处理try {
    $db->beginTransaction();
    
    $db->update('account', 
        ['balance' => 'balance - 100'], 
        'user_id = ?', 
        [1]
    );
    
    $db->update('account', 
        ['balance' => 'balance + 100'], 
        'user_id = ?', 
        [2]
    );
    
    $db->commit();
    echo "转账成功\n";} catch (Exception $e) {
    $db->rollBack();
    echo "转账失败: " . $e->getMessage() . "\n";}

功能特点

  1. 面向对象封装:基于 MySQLi 扩展的面向对象接口

  2. 预处理语句:防止 SQL 注入攻击

  3. 参数绑定:支持参数化查询

  4. 常用方法

    • query() - 执行SQL查询

    • getOne() - 获取单条记录

    • getAll() - 获取多条记录

    • getScalar() - 获取单个值

    • insert() - 插入数据

    • update() - 更新数据

    • delete() - 删除数据

  5. 事务支持

    • beginTransaction() - 开启事务

    • commit() - 提交事务

    • rollBack() - 回滚事务

  6. 实用功能

    • 获取最后插入ID

    • 获取影响行数

    • 获取错误信息

    • 获取最后执行的SQL

注意事项

  1. 在生产环境中,应该将数据库配置信息存储在安全的地方

  2. 对于大型项目,可以考虑使用连接池管理数据库连接

  3. 在高并发场景下,可能需要调整 MySQL 服务器的连接数限制

  4. 所有数据库操作都应该有适当的错误处理机制

这个 MySQLi 数据库操作类封装了常用的数据库操作方法,可以直接在项目中使用,也可以根据需要进行扩展。



本文关键词: php 装的 mysqli 完整 实例

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部