Как избежать подключения к базе данных mysql с каждым запросом в php? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть простая php страница, которая запрашивает у базы данных случайную строку (за некоторыми исключениями), каждый раз, когда она получает запрос на публикацию.

Я заметил, что запрос на публикацию занимает некоторое время получить ответ.
, поскольку при каждом почтовом запросе он переподключается к mysql серверу , поэтому я подумал, что, возможно, я смогу сохранить pdo в $ _SESSION и использовать его, чтобы сэкономить время и не выполнять аутентификацию при каждом запросе

я не знаю, есть ли способ исправить это:)

<?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());
}

?>

1 Ответ

2 голосов
/ 24 апреля 2020

Подключение к базе данных mysql с каждым запросом - вот как

PHP предназначено для работы

Здесь нет ничего плохого, здесь нечего оптимизировать.

Go подключайтесь при каждом запросе и в следующий раз попытайтесь оптимизировать реальную проблему.

, поэтому я подумал

Не думаю . Мера .

Исходя из опыта, я могу сказать, что запрос требует времени, а не соединения. Но технически это было бы предположение все же. Так что сначала вам нужно измерить , затем получить реальную проблему, а затем google для нее, решений достаточно.

Но сначала измерьте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...