【发布时间】: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());
}
?>
【问题讨论】:
-
我没有足够的代表发表评论,但这与:Connection pooling in PHP
标签: php mysql session post pdo