写在前面

很多年前,还在学校的时候,我就写过一个自己的mysql连接库,当时没有用到mysqli,基本是面向对象的一个版本,很多判断很多写法都很稚嫩,大概几百行吧

挖坟代码

挖坟代码

后来,我实际工作大概一两年的时候,在北京的出租屋里,我重新写了一次mysql连接库,精简了很多,一百来行

算是一个很难忘的记忆吧

这次写的,是一个纯静态调用的php类库

很粗糙,也没有当年那么多的判断和检测

纯粹只是情怀而写

代码

调用示例

调用示例

代码里没有什么很特别的东西,也只是心血来潮

  1. 外部通过setConfig方法可以注入配置的数组,直接写入到类的属性里
  2. 所有的方法调用都是纯静态的,不需要实例化
  3. setConfig方法里返回了类的所在位置,可以后续链式调用
  4. row方法和rows方法都支持传入匿名函数,可以在刚把数据取出来的时候直接处理数据,减少循环次数
<?php /** * Db操作:2025/06/10 * * 具体用法: * * 配置内容 * Db::setConfig([ * 'dbHost' => '127.0.0.1', * 'dbUser' => 'root', * 'dbPass' => 'root', * 'dbName' => 'test', * 'dbCharset' => 'utf8mb4', * ]); * * 连接 * Db::enable(); * * 执行单条sql * $result = Db::query("UPDATE user SET a=1,b=2 WHERE 1"); * * 获取单条数据,并在其内修改 * $row = Db::row("SELECT * FROM `user` LIMIT", function($row) { * $row['test'] = 1; * return $row; * }); * * 获取多条数据,并在其内修改 * $row = Db::rows("SELECT * FROM `user` LIMIT 2", function($row) { * $row['test'] = 1; * return $row; * }); */ class Db { private static $dbHost = '127.0.0.1'; private static $dbUser = 'root'; private static $dbPass = 'root'; private static $dbName = ''; private static $dbCharset = 'utf8mb4'; private static $db; public static function query($sql) { return self::$db->query($sql); } public static function rows($sql, $callback = null) { $result = self::$db->query($sql); if ($result->num_rows == 0) return []; while ($row = $result->fetch_assoc()) { if ($callback) $row = $callback($row); $rows[] = $row; } return $rows; } public static function row($sql, $callback = null) { $result = self::$db->query($sql); if ($result->num_rows == 0) return []; $row = $result->fetch_assoc(); if ($callback) $row = $callback($row); return $row; } // 注入配置 public static function setConfig($userConfig = []) { if (empty($userConfig)) return __CLASS__; $dbConfigNames = ['dbHost', 'dbUser', 'dbPass', 'dbName', 'dbCharset']; foreach ($dbConfigNames as $dbConfigName) { if (!empty($userConfig[$dbConfigName])) self::$$dbConfigName = $userConfig[$dbConfigName]; } return __CLASS__; } // 启用DB public static function enable() { // 连接 self::$db = new mysqli(self::$dbHost, self::$dbUser, self::$dbPass, self::$dbName); if (self::$db->connect_error) { die("数据库连接失败: " . self::$db->connect_error); } if (self::$dbCharset) self::$db->set_charset(self::$dbCharset); } // 销毁Db public static function disable() { self::$db->close(); } }
最后修改:2025 年 07 月 11 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~