【问题标题】:how to avoid connecting to mysql database with every request in php?如何避免在php中的每个请求都连接到mysql数据库?
【发布时间】:2020-08-07 14:35:05
【问题描述】:

我有一个简单的 php 页面,它会在每次收到 post 请求时查询数据库中的随机行(有一些例外)。

我注意到发布请求需要一些时间才能得到响应。
因为每次发布请求它都会重新连接到 mysql 服务器,所以我想也许我可以将 pdo 存储在 $_SESSION 中并使用它来节省一些时间,而不必对每个请求进行身份验证 p>

我不知道有没有办法解决这个问题:)

<?php
// check for POST Request Only
if($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header("HTTP/1.0 405 Method Not Allowed");
    exit();
}
$host = 'localhost';
$db   = 'Quiz';
$user = 'admin';
$pass = 'password';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
    $pdo = new PDO($dsn, $user, $pass, $options);

    if (!empty($_POST['old'])) {
        $in  = str_repeat('?,', count($_POST['old']) - 1) . '?';
        $sql = "SELECT * FROM QT WHERE id NOT IN ($in) ORDER BY RAND() LIMIT 1";
        $stm = $pdo->prepare($sql);
        $stm->execute($_POST['old']);
        $data = $stm->fetchAll();
        echo json_encode($data);
        exit();

    } else {
        $stm = $pdo->prepare('SELECT * FROM QT ORDER BY RAND() LIMIT 1');
        $stm->execute();
        $data = $stm->fetchAll();
        echo json_encode($data);
        exit();

    }
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

?>

【问题讨论】:

标签: php mysql session post pdo


【解决方案1】:

Сonnecting to mysql database with each request is how

PHP 打算工作

这里没有错,这里没有什么可优化的。

对每个请求进行连接,下次尝试优化实际问题。

原来如此

不要思考测量

根据经验,我可以告诉您,需要时间的是查询,而不是连接。但从技术上讲,这仍然是一个猜测。所以你必须先衡量,然后找到真正的问题,然后google,解决方案很多。

但要先测量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2019-05-18
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多