PHP: Mysql соединения - PullRequest
       2

PHP: Mysql соединения

1 голос
/ 16 июня 2011

Я внедряю сценарий на сайте, где они не хотят давать мне доступ к своей основной базе данных, поэтому они создали для меня вторую базу данных. Однако после вызова функции, которая подключается к моей базе данных из index.php (где они имеют подключение к своей базе данных), похоже, что их соединение потеряно. Это нормально? Можно ли установить второе соединение, используя mysql_connect (), не мешая первому соединению? Кстати, я никогда не использую mysql_close.

Это моя функция подключения

 public function connect() {
        $link = mysql_connect('localhost', 'user', 'pwd');
        if (!$link) {
            die('Could not connect: ' . mysql_error());
        }
        mysql_select_db('database');

        return $link;
    }

Спасибо!

Ответы [ 4 ]

2 голосов
/ 16 июня 2011

PHP * семейство функций mysql_ принимает необязательный аргумент link, где вы указываете, какая ссылка будет использоваться для данной функции. Проверьте документы здесь для mysql_error (как пример): http://www.php.net/manual/en/function.mysql-error.php

Проблема в том, что многие новые разработчики, которые вызывают mysql_connect непосредственно в своем коде, вместо того, чтобы использовать класс оберточной базы данных (или, что еще лучше, PDO ), будут склонны не предоставлять этот необязательный аргумент. Если вы не укажете аргумент link, функция будет предполагать, что вы хотите использовать ссылку, которая была создана последним - в данном случае, вашу ссылку.

Вы можете исправить это упущение в своей собственной функции:

 public function connect() {
        $link = mysql_connect('localhost', 'user', 'pwd');
        if (!$link) {
            die('Could not connect: ' . mysql_error($link));
        }
        mysql_select_db('database', $link);

        return $link;
    }

.. но это не поможет остальной части проекта, где разработчики, вероятно, звонят по номеру mysql_query повсеместно, не передавая ссылку, поэтому по умолчанию будет использоваться ваша новая ссылка. Лучший способ обойти это без необходимости исправления всего остального кода - использовать PDO для доступа к дополнительной базе данных.

Еще одна вещь, которая может повлиять на код, даже если другие разработчики передают аргумент link, это то, что вы не используете аргумент new_link при вызове mysql_connect. Вы в основном "крадете" их ссылку! Если они старались всегда использовать аргумент link для mysql_query, вы можете использовать аргумент new_link, чтобы убедиться, что вы не взломали соединение с базой данных:

 public function connect() {
        $link = mysql_connect('localhost', 'user', 'pwd', true);
        if (!$link) {
            die('Could not connect: ' . mysql_error($link));
        }
        mysql_select_db('database', $link);

        return $link;
    }
1 голос
/ 16 июня 2011

Конечно, просто убедитесь, что вы используете эту переменную $link, которую вы создали, например, в вызове mysql_select_db(), вызове mysql_error() и везде, где вы используете функции mysql_*.

0 голосов
/ 16 июня 2011

Один из способов, которыми я раньше пользовался, - это использовать mysqli для второго соединения с базой данных, чтобы избежать конфликтов.Это зло и хакерство, но это был кратчайший путь к проблеме:

http://php.net/manual/en/book.mysqli.php

0 голосов
/ 16 июня 2011

Проверьте сообщение от sedativchunk .Он создал класс PHP, который позволяет вам открывать несколько соединений.Однако я сам этим не пользовался.

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