Как объявить переменную php для хранения возвращаемого значения «mysql_connect ()»? - PullRequest
2 голосов
/ 11 июня 2011

Мне нужно сохранить значение mysql_connect () в глобальной переменной, которая доступна в каждом php-файле моего проекта, например, $db_ServerVal = mysql_connect().

. Мне нужно иметь возможность вызывать mysql_connect только один раз,в начале программы.

Затем в каждом php-файле - $db_ServerVal ДОЛЖЕН быть действительным.Не в первый раз.Каждый раз.Пока я не вызову mysql_close( $db_ServerVal);

Могу ли я использовать $GLOBALS[], предопределенный массив в php, для хранения моего $db_ServerVal соединения с базой данных?

Другая проблема - яМне нужно иметь событие 'close', когда окно браузера закрывается, чтобы я знал, что пора вызвать mysql_close( $db_ServerVal);.

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

Хотя я мог бы вызывать mysql_connect() и mysql_close() до и после каждого вызова базы данных -Я не уверен, что это стандартно.

Ответы [ 5 ]

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

Не закрывайте базу данных каждый раз.Вы даже можете вообще не закрывать соединение, поскольку оно неявно будет закрыто в конце скрипта.

Если вы хотите иметь возможность подключаться постоянно, вы можете написать для этого функцию:

$_connection = false;
function getConnection()
{
  global $_connection;
  if (!$_connection)
    $_connection = mysql_connect( ... );
  return $_connection;
}

function closeConnection()
{
  global $_connection;
  if ($_connection)
    mysql_close($_connection);
  $_connection = false;
}

Конечно, встраивание соединения в реальный класс еще лучше, но это поможет вам решить проблему.Шаги малыша.:)

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

Во-первых, вам не нужно хранить эту переменную, так как ВСЕ функции mysql_ * будут использовать последнее открытое соединение, если вы опустите аргумент db_connection.вам нужно будет сохранить это, только если вы хотите открыть несколько соединений с БД одновременно.

секунда, соединение mysql автоматически закроется в конце вашего скрипта.в большинстве случаев нет необходимости закрывать его.

в-третьих, вам больше не следует использовать mysql_ *.используйте mysqli_ * или рекомендуемый класс PDO.

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

Вы можете сохранить объект соединения в глобальной переменной и получить к нему доступ через $ GLOBALS. Обратите внимание, что если вы не используете постоянные соединения (и вы должны знать, что вы делаете, если вы это делаете), соединение с базой данных автоматически закроется, когда ваш PHP-скрипт все равно завершится.

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

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

require('db_connect.php');

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

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

Это из моего класса БД, но я думаю, что это должно вам помочь. Просто откройте в первый раз, когда вам это нужно, и закройте в конце своей страницы. Или, как и у меня, есть соединение в конструкторе вашего класса БД и закрытие в деструкторе.

//Constructor Code
$this->link_id = mysql_connect($this->db_host, $this->db_user, $this->db_pass);


//Destructor Code
@mysql_close($this->link_id);

Вот пример из двух методов, которые я использую.

    //forward php4 to constructor
    function db_class() {

        return $this->__construct();
    }

    //constructor
    function __construct() {

        register_shutdown_function(array(&$this, "__destruct"));

        $this->link_id = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
        mysql_select_db($this->db_name, $this->link_id);

}
    //destructor
    function __destruct() {


        @mysql_close($this->link_id);

    }
...