Должен ли я разместить соединение с базой данных MySQL внутри функции PHP? - PullRequest
0 голосов
/ 13 мая 2011

Безопасно ли размещать мое соединение с базой данных MySQL внутри функции PHP, чтобы другие функции PHP могли использовать его?

Ответы [ 3 ]

9 голосов
/ 13 мая 2011

Да. это хорошая идея.

Я даже помещаю свой в класс.

class database {

     protected $databaseLink;

     function __construct($mysql_db, $mysql_user, $mysql_pass, $mysql_dbName){
            $this->databaseName = $mysql_dbName;
            $this->database = $mysql_db;
            $this->mysql_user = $mysql_user;
            $this->mysql_pass = $mysql_pass;
            $this->openConnection();
      }

      function openConnection(){
            $this->databaseLink = mysql_connect($this->database, $this->mysql_user, $this->mysql_pass);
            mysql_select_db($this->databaseName, $this->databaseLink);
      }

      function get_link(){
            return $this->databaseLink;
      }

}

Тогда вы можете просто сделать:

 $db = new database('database', 'username', 'password', 'dbName');

 //to do a query:
 mysql_query("some query", $db->get_link());
1 голос
/ 13 мая 2011

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

function get_db()
{
  $db = mysql_connect(...);
  return $db;
}

Тогда каждый раз, когда вы звоните, вы будете создавать и возвращать новое соединение. Может быть лучше создать его один раз для сценария внутри класса как Singleton , и чтобы метод класса возвращал базе данных одно соединение с любой вызывающей его функцией.

РЕДАКТИРОВАТЬ Ответ Нила на самом деле демонстрирует одноэлементный паттерн для этого. Обыграй меня с более полным кодом ответа.

0 голосов
/ 13 мая 2011

Это хорошая вещь для производительности.Подключение к базе данных только при вызове функции приведет к хорошей производительности для сервера SQL.

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