Использование одного и того же MySQL Connection на разных страницах PHP - PullRequest
4 голосов
/ 14 февраля 2010

Я создаю простое веб-приложение на PHP для своего проекта в колледже. Я использую базу данных MySQL.

Я подключаюсь к базе данных в login.php. После подключения я назначаю соединение для $ _SESSION ["conn"], а затем перенаправляю на main.php.

В main.php я пишу $ conn = $ _SESSION ["conn"]. Но соединение в $ conn не работает.

Я думал, что когда скрипт login.php заканчивается, соединение закрывается. Поэтому я попытался использовать mysql_pconnect вместо mysql_connect, но это тоже не работает.

Я знаю, что могу подключиться к базе данных в каждом файле PHP. Но я не хочу этого делать. Я хочу использовать одно и то же соединение во всех файлах PHP.

Ответы [ 5 ]

9 голосов
/ 14 февраля 2010

Вместо сохранения соединения с БД в сеансе вы должны выполнять вызовы соединения в отдельном файле, таком как db.php, а затем запрашивать его в каждом из ваших сценариев. Например, поместите ваше соединение в db.php:

mysql_connect('...', '...', '...');
mysql_select_db('...');

и затем внесите его в login.php:

require('db.php');
$res = mysql_query('...');

После этого вы можете сделать то же самое для каждого PHP-файла, которому требуется доступ к БД, и вам когда-либо потребуется изменить учетные данные для доступа к БД в одном файле.

6 голосов
/ 14 февраля 2010

После подключения я назначаю соединение для $ _SESSION ["conn"], а затем перенаправляю на main.php.

Возможно, вы захотите прочитать о сеансах PHP . Нельзя хранить ресурсы (соединения с базой данных, файловые дескрипторы и т. Д.) В сеансе, поскольку они не могут быть сериализованы и сохранены.

Имейте в виду, что при каждом посещении сценария PHP вызывается новый экземпляр интерпретатора PHP (через CGI, через FastCGI или через встроенный модуль) и вызывается новый экземпляр сценария. Ничто не разделяется между вызовами сценария, потому что вся среда исчезает при выходе из сценария.

Другие ответы верны - вам нужно подключаться к базе данных при каждом вызове скрипта. Поместите соединение в общий включаемый файл для удобства.

2 голосов
/ 14 февраля 2010

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

0 голосов
/ 15 марта 2017

Звучит так, что вы хотите, чтобы ваши php-соединения были постоянными, таким образом, и если это так, то вам нужно создать объект PDO с необходимыми параметрами, чтобы создать новый объект PHP PDO, который будет пытаться подключиться к mysql. и в экземпляре объекта попытайтесь передать значение параметра постоянства в значение true, возможно, у вас есть в каждом php-скрипте одно и то же Objetc-соединение с PDO, но вы в конечном итоге столкнетесь с такими проблемами ... но это не повторяется в PHP Программирование лучших практик ... лучший способ сделать это - включить файл подключения для каждого скрипта в вашем проекте. Прочитайте документацию PHP для постоянных подключений, чтобы узнать больше о проблемах, обнаруженных для этих объектов подключения, особенно для последних версий php. PHP объявил, что постоянные соединения находятся на пути к удалению из будущей версии, поскольку это может увеличить нагрузку на сервер с постоянными ресурсами ... Извините, если уже слишком поздно

0 голосов
/ 14 февраля 2010

У меня обычно есть класс Connection, который требуется страницам для установления соединения. Что-то вроде:

class Connection    {
    public $dbConnection = null;
    public $isConnectionActive = false;
    private $dbServer = null;
    private $dbCatalog = null;
    private $dbUser = null;
    private $dbPassword = null;
}

Этот класс обрабатывает открытие и закрытие соединения на любых страницах.

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