php封装MySQL调用的详细例子

2024-03-25 15:47 php封装MySQL调用的详细例子已关闭评论

封装MySQL调用通常意味着创建一个类或一组函数,将数据库连接、查询执行、结果处理等操作隐藏在统一的接口背后,以简化代码、提高复用性和降低耦合度。以下是一个使用PHP PDO(PHP Data Objects)封装MySQL调用的详细例子:

<?php

class Database
{
    private $host = 'localhost';
    private $dbname = 'your_database';
    private $username = 'your_username';
    private $password = 'your_password';

    private $pdo;

    /**code by每日教程teachcourse.cn
     * 构造函数,初始化数据库连接
     */
    public function __construct()
    {
        try {
            $dsn = "mysql:host={$this->host};dbname={$this->dbname}";
            $options = [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 抛出异常而非错误信息
                PDO::ATTR_EMULATE_PREPARES => false, // 禁用预处理模拟,提高安全性
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认以关联数组返回结果
            ];

            $this->pdo = new PDO($dsn, $this->username, $this->password, $options);
        } catch (PDOException $e) {
            throw new RuntimeException("Could not connect to the database: " . $e->getMessage());
        }
    }

    /**
     * 执行一条SQL查询并返回结果集
     * code by每日教程www.teachcourse.cn
     * @param string $sql SQL查询语句
     * @param array $params 查询参数(预处理语句中的占位符对应值)
     * @return array 查询结果集
     */
    public function query(string $sql, array $params = []): array
    {
        $stmt = $this->pdo->prepare($sql);

        $stmt->execute($params);

        return $stmt->fetchAll();
    }

    /**
     * 执行一条非查询SQL语句(如INSERT、UPDATE、DELETE)
     *
     * @param string $sql SQL语句
     * @param array $params 查询参数(预处理语句中的占位符对应值)
     * @return int 影响的行数
     */
    public function execute(string $sql, array $params = []): int
    {
        $stmt = $this->pdo->prepare($sql);

        $stmt->execute($params);

        return $stmt->rowCount();
    }

    /**
     * 开启事务
     */
    public function beginTransaction(): void
    {
        $this->pdo->beginTransaction();
    }

    /**
     * 提交事务
     */
    public function commit(): void
    {
        $this->pdo->commit();
    }

    /**
     * 回滚事务
     */
    public function rollBack(): void
    {
        $this->pdo->rollBack();
    }
}

// 使用示例
$db = new Database();

// 查询示例
$results = $db->query("SELECT * FROM users WHERE id = ?", [1]);
foreach ($results as $row) {
    echo $row['username'] . "\n";
}

// 非查询操作示例
$affectedRows = $db->execute("UPDATE users SET status = ? WHERE id = ?", ['active', 1]);

// 事务示例
//code by每日教程teachcourse.cn
$db->beginTransaction();
try {
    $db->execute("UPDATE accounts SET balance = balance - ? WHERE user_id = ?", [100, 1]);
    $db->execute("INSERT INTO transactions (user_id, amount) VALUES (?, ?)", [1, 100]);
    $db->commit();
} catch (\Throwable $e) {
    $db->rollBack();
    echo "Transaction failed: " . $e->getMessage();
}

在这个例子中,我们创建了一个名为 Database 的类,封装了与MySQL数据库的连接、查询执行、事务管理等功能。通过实例化这个类并调用其方法,可以轻松地执行SQL操作,而无需直接处理底层的PDO对象或关注数据库连接细节。这种方法不仅提高了代码的整洁性和可维护性,也增强了应用程序的安全性,因为使用了预处理语句来防止SQL注入攻击。

当前文章价值8.55元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/3175.html ,谢谢支持!

资源分享

分类:php 标签:
Android开发之WebView控件使用说明 Android开发之WebView控件使用
Eclipse关联android-support-v4包的两种方法 Eclipse关联android-support-v4
自定义弹窗 VS AlertDialog分享弹窗 自定义弹窗 VS AlertDialog分
你所了解的VisualSVN Server,VisualSVN,TortoiseSVN? 你所了解的VisualSVN Serve

评论已关闭!