Должен ли я закрыть соединение с базой данных PDO внутри метода или на вызывающей странице? - PullRequest
1 голос
/ 13 сентября 2011

Не могу найти ответ на этот вопрос.Я знаю, что для закрытия соединения с PDO необходимо использовать $ db = NULL;Я использовал внедрение зависимости, чтобы использовать доступ к моей базе данных в классах.Должен ли я использовать $ db = NULL;внутри метода, или я должен использовать его на странице, вызывающей запрос?

примерно так:

public function find_all() {
     connect to $db;
       //run query
        $db = NULL;
          return query
}

или должно быть так:

$thing = Method::find_all();
 //display results
 $thing = NULL;

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

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Все PHP-соединения закрываются автоматически, когда скрипт заканчивается. Тем не менее, это не плохая практика, чтобы вручную «убрать» ненужные объекты.

1 голос
/ 13 сентября 2011

Скорее всего, ваш контейнер внедрения зависимостей будет хранить копию вашего соединения с базой данных, поэтому, хотя unset ($ db) или $ db = null могут быть использованы для его нормального закрытия, это будет работать, только если это последняя ссылка.

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

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

0 голосов
/ 13 сентября 2011

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

...