精易论坛

标题: php+mysql中间件 [打印本页]

作者: 火鱼huoyu    时间: 2024-10-25 18:05
标题: php+mysql中间件
[PHP] 纯文本查看 复制代码
<?php
// 数据库信息
$host = '127.0.0.1'; // 数据库主机名
$dbname = ''; // 数据库名称
$username = ''; // 数据库用户名
$password = ''; // 数据库密码
$key = 'fegvdvregdb';// 验证密文

// 获取 POST 请求中的 msgkey 参数
$msgkey = $_POST['msgkey'];

// 初始化返回结果
$result = array(
    'code' => 200,
);

// 验证 msgkey 是否与网站内置的一致
if ($msgkey!= $key) {
    // 如果不一致,返回 code 状态码为 202 和错误信息
    $result['code'] = 202;
    $result['message'] = 'Invalid msgkey';
} else {
    // 解密 SQL 语句
    $encrypted_sql = $_POST['sql'];
    $decrypted_sql = openssl_decrypt($encrypted_sql, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);

    if ($decrypted_sql === false) {
        // 解密失败,返回 code 状态码为 203 和错误信息
        $result['code'] = 203;
        $result['message'] = 'Decryption failed';
    } else {
        try {
            // 使用数据库连接池获取连接
            $connectionPool = new ConnectionPool($host, $dbname, $username, $password);
            $pdo = $connectionPool->getConnection();

            // 设置连接超时时间(示例为 5 秒)
            $pdo->setAttribute(PDO::ATTR_TIMEOUT, 5);

            // 预处理 SQL 语句并绑定参数(如果有参数的话)
            $stmt = $pdo->prepare($decrypted_sql);
            // 假设 $params 是包含参数的数组
            if (isset($params)) {
                foreach ($params as $key => $value) {
                    $stmt->bindValue($key, $value);
                }
            }
            $stmt->execute();

            // 获取cha询结果
            if (strpos(strtolower($decrypted_sql), 'select') === 0) {
                $result['data'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
            } else {
                $result['data'] = array('affected_rows' => $stmt->rowCount());
            }

            // 将连接归还到连接池
            $connectionPool->releaseConnection($pdo);
        } catch (PDOException $e) {
            // 记录错误日志
            error_log('Database error: '. $e->getMessage());

            // 发生错误,设置 code 为 201 并输出错误信息
            $result['code'] = 201;
            $result['message'] = $e->getMessage();
        }
    }
}

// 输出 JSON 格式的结果
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);

class ConnectionPool
{
    private $host;
    private $dbname;
    private $username;
    private $password;
    private $connections = [];
    private $maxConnections = 10; // 设置最大连接数

    public function __construct($host, $dbname, $username, $password)
    {
        $this->host = $host;
        $this->dbname = $dbname;
        $this->username = $username;
        $this->password = $password;
    }

    public function getConnection()
    {
        if (empty($this->connections)) {
            return new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->username, $this->password);
        } else {
            return array_pop($this->connections);
        }
    }

    public function releaseConnection($connection)
    {
        if (count($this->connections) < $this->maxConnections) {
            $this->connections[] = $connection;
        } else {
            $connection = null;
        }
    }
}
?>


[color=rgba(0, 0, 0, 0.85)]此代码实现了一个与数据库交互的系统,通过验证密文来确保请求的合法性,然后对加密的 SQL 语句进行解密并执行,最后返回执行结果。同时,使用了连接池来管理数据库连接,以提高性能和资源利用率。

作者: po1718    时间: 2024-10-25 18:16
谢谢分享, 给过建议,结果加密下再返回安全些.
作者: 阿凡地方23    时间: 2024-10-25 21:04
感谢分享
作者: bianyuan456    时间: 2024-10-25 22:56
已经顶贴,感谢您对论坛的支持!
作者: 葵花宝典    时间: 2024-10-25 22:58
的撒大大撒的撒大大撒大撒大苏打阿松大
作者: 396384183    时间: 2024-10-26 00:41

学习一下支持开源
作者: kyo9766    时间: 2024-10-26 08:38
简单实用,感谢分享
作者: year1970    时间: 2024-10-26 08:49
感谢分享
作者: 一指温柔    时间: 2024-10-26 11:43
感谢分享,很给力!~
作者: jtucar    时间: 2024-10-26 14:28
支持开源~!感谢分享
作者: KEY心碎    时间: 2024-10-27 09:16
这个丢易语言怎么使用呢?
作者: 一指温柔    时间: 2024-10-27 09:17
感谢分享
作者: 火鱼huoyu    时间: 2024-10-27 12:41
有没有老板写个易语言调用加密的例子
作者: please    时间: 2024-10-28 09:38
感谢分享,支持开源!!!
作者: zkwt0012    时间: 2024-10-28 17:45
支持开源~!感谢分享
作者: zzh233    时间: 2024-10-28 22:09
需要一个对应的易语言加密例子
作者: hadisi    时间: 2024-11-9 22:24
#在这里快速回复# 感谢分享啊
作者: JYYeah    时间: 2024-12-2 19:32
支持开源~!感谢分享
作者: 熊不熊    时间: 2024-12-4 07:03
感谢分享,很给力!~
作者: webyezi    时间: 2024-12-31 16:29
易语涯怎么弄呢  不知道有没有全部例子

作者: 515667395    时间: 2025-1-19 13:50
多谢分享
作者: 兵三进一    时间: 2025-2-14 13:38
支持开源~!感谢分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4