在 PHP 中,mysqli 是一个内建的扩展,用于与 MySQL 数据库进行交互。然而,如果你想要“扩展”mysqli 的功能,通常意味着你要添加一些自定义的函数或类来封装 mysqli 的功能,从而简化常见的数据库操作或提供额外的功能。
以下是一个简单的示例,展示如何创建一个自定义的数据库操作类,该类使用 mysqli 作为其后端,并添加了一些自定义方法:
php
复制代码
class MyDatabase {
private $mysqli;
public function __construct($host, $username, $password, $database) {
$this->mysqli = new mysqli($host, $username, $password, $database);
// 检查连接是否成功
if ($this->mysqli->connect_errno) {
die('连接 MySQL 失败: ' . $this->mysqli->connect_error);
}
// 设置字符集为 utf8mb4
$this->mysqli->set_charset('utf8mb4');
}
// 关闭数据库连接
public function close() {
$this->mysqli->close();
}
// 执行查询并返回结果集(对于 SELECT 语句)
public function query($sql, $params = []) {
if (!empty($params)) {
// 使用预处理语句和参数绑定
$stmt = $this->mysqli->prepare($sql);
// 绑定参数
call_user_func_array([$stmt, 'bind_param'], $this->refValues($params));
// 执行预处理语句
$stmt->execute();
// 获取结果集
$result = $stmt->get_result();
// 关闭预处理语句
$stmt->close();
return $result;
} else {
// 对于没有参数的查询,直接执行 SQL 语句
return $this->mysqli->query($sql);
}
}
// 执行插入、更新或删除操作(对于 INSERT, UPDATE, DELETE 语句)
public function execute($sql, $params = []) {
if (!empty($params)) {
// 使用预处理语句和参数绑定
$stmt = $this->mysqli->prepare($sql);
// 绑定参数
call_user_func_array([$stmt, 'bind_param'], $this->refValues($params));
// 执行预处理语句
return $stmt->execute();
} else {
// 对于没有参数的查询,直接执行 SQL 语句
return $this->mysqli->query($sql);
}
}
// 私有方法:将参数数组转换为引用数组,用于 bind_param 方法
private function refValues($arr) {
if (strnatcmp(phpversion(),'5.3.0') >= 0) // Reference is required for call_user_func_array() / PHP 5.3.0+
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
return $refs;
}
// 添加其他自定义方法...
}
// 使用示例
$db = new MyDatabase('localhost', 'username', 'password', 'database_name');
// 插入数据
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$params = ['John Doe', 'john@example.com'];
$db->execute($sql, $params);
// 查询数据
$sql = "SELECT * FROM users WHERE id = ?";
$params = [1];
$result = $db->query($sql, $params);
if ($result && $result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["http://www.gzzlv.com"]. " - Name: " . $row["name"]. "<br>";
}
}
// 关闭数据库连接
$db->close();
在这个示例中,MyDatabase 类封装了 mysqli 的功能,并添加了一些自定义方法,如 query() 和 execute(),它们简化了与数据库的交互。refValues() 方法是一个辅助方法,用于将参数数组转换为引用数组,以便与 mysqli_stmt::bind_param() 方法一起使用。