Лучшие практики, чтобы избежать ошибки «Слишком много соединений» - PullRequest
0 голосов
/ 29 мая 2018

Недавно я заметил несколько "Слишком много подключений" ошибок на моем сайте.Я знаю причины и способы «решить» эту проблему, но я должен признать, что не знаю лучших методов, чтобы избежать этой проблемы или как улучшить мой код.

Я опубликую теоретический код (Пожалуйста, предположите, что все работает), и я прошу вас, ребята, помочь мне с некоторыми вопросами и как улучшить этот код.Таким образом, я могу исправить свои другие коды.

connection.php

$conn = new PDO('mysql:host=HOST;dbname=DATABASE;charset=utf8','USER', 'PASSWORD');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

my_page.php

include("connection.php");

$stmt = $conn->prepare("SELECT * FROM tableA WHERE condition = :condition");
$stmt->bindParam(':condition', $condition, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->rowCount();


function getName($id){
global $conn;
    $stmt = $conn->prepare("SELECT * FROM tableB WHERE condition = :condition");
    $stmt->bindParam(':condition', $condition, PDO::PARAM_INT);
    $stmt->execute();
    $row = $stmt->rowCount();
}

function getCompany($id){
global $conn;
    $stmt = $conn->prepare("SELECT * FROM tableC WHERE condition = :condition");
    $stmt->bindParam(':condition', $condition, PDO::PARAM_INT);
    $stmt->execute();
    $row = $stmt->rowCount();
}

МОИ ВОПРОСЫ:

1) Сколько соединений с базой данных было открыто в приведенном выше коде?

2) Каждый раз, когда выполняется запрос, используйте ($ stmt =$ conn-> prepare), новое соединение открыто?

3) Есть способ оптимизировать приведенный выше код, предполагая, что INNER JOIN или какая-либо другая оптимизация запроса невозможна?Я имею в виду, что есть 3 таблицы (не связаны), и мне нужно запрашивать информацию из них, не открывая новые соединения.

1 Ответ

0 голосов
/ 02 сентября 2018

Ответы на ваши конкретные вопросы

1) Открыто одно соединение на вызов my_page.php.

2) Новое соединение открывается при каждом вызове my_page.php.

3) Существует возможность оптимизации вашего кода.Вы должны создать класс соединения и использовать шаблон синглтона для получения соединения с БД при необходимости.

...