PHP »Синглтон MySQL соединение - PullRequest
2 голосов
/ 26 февраля 2012

Следующая функция является старым способом для подключений MySQL

function dbconn($autoclean = false, $mysql_close = false)
{
    global $mysql_host, $mysql_user, $mysql_pass, $mysql_db;
    mysql_connect($mysql_host, $mysql_user, $mysql_pass);
    mysql_select_db($mysql_db);

    userlogin();

    if ($autoclean)
        register_shutdown_function("autoclean");

    if ($mysql_close)
        register_shutdown_function("mysql_close");
}

Хорошо ... Мой выделенный сервер сообщил мне что-то вроде «Использовать Singleton, потому что вы рассылаете спам соединения mysql»,поэтому я кодирую одноэлементный класс для MySQL, но спам все еще существует.

<?php
    class mysql {
        private static $instance;
        private $res;
        private function __construct() 
        {
            $this->res = mysql_connect('localhost','user','password');
            mysql_select_db('database', $this->res);
        }
        public static function getinstance() {
            if(!isset(self::$instance)) {
                $c = __CLASS__;
                self::$instance = new $c;
            }
            return self::$instance;
        }
        public function getres() {
            return $this->res;
        }
    }
?>

и функция ...

function dbconn($autoclean = false, $mysql_close = false, $file = '')
{
    require_once("MySQL.php");
    $m = mysql::getinstance();
    $m->getres();

    userlogin();

    if ($autoclean)
        register_shutdown_function("autoclean");

    //if ($mysql_close)
    //  register_shutdown_function("mysql_close");
}

Спасибо!

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

Обратите внимание, что это все еще открывает соединение для запроса. Если ваш сайт популярен, а сервер работает медленно и неправильно настроен, это может привести к большому количеству одновременных подключений и еще больше задушить базу данных. В этом случае я могу только рекомендовать сменить сервер или хостер)

Конечно, ваши запросы также могут быть медленными, что может привести к избыточной загрузке в MySQL. Если ваш сайт действительно популярен.

1 голос
/ 26 февраля 2012

Синглтон будет действовать только в течение одного HTTP-запроса для одного посетителя, а затем будет очищен, если только вы не выполните некоторое кэширование. Таким образом, может показаться, что спам в вашем соединении по запросу. То, что вы хотите, это какой-то пул соединений, как описано здесь: Пул соединений в PHP .

0 голосов
/ 26 февраля 2012

Я никогда не слышал о «спам-соединениях mysql».Вероятно, вы используете огромное количество mysql-соединений из ограниченного пула доступных соединений.

В таком случае постоянные соединения MySQL могут помочь.

Но, пожалуйста прочитайте руководство по mysql_pconnect !Эта подсказка из документации - не единственная ловушка:

'Обратите внимание, что ссылки такого рода работают, только если вы используете модульную версию PHP.Для получения дополнительной информации см. Раздел «Постоянные соединения с базой данных». '

и

' Постоянные соединения были разработаны для однозначного сопоставления с обычными соединениями.Это означает, что вы всегда должны иметь возможность заменять постоянные соединения непостоянными соединениями, и это не изменит поведение вашего скрипта.Он может (и, вероятно, будет) изменить эффективность скрипта, но не его поведение! '

При неправильном использовании проблема «спама» становится еще больше ...

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