PHP PDO: когда правильно завершить соединение - PullRequest
0 голосов
/ 01 декабря 2011

Я использую PDO с оператором try ... catch.Я хочу подтвердить, ребята, правильно ли я это понимаю.Я ставлю $dbhandler = NULL до throw

$dbhandler = NULL;
if(!$sthandler->rowCount()) throw new invalidUplineException();

или после броска

if(!$sthandler->rowCount()) throw new invalidUplineException();
$dbhandler = NULL;

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Это неправильное использование ссылки, которую вы только что установили на null. Так что сохраните количество строк и после этого установите его в нуль:

$rowCount = $sthandler->rowCount();
$sthandler = null;
if(!$rowCount) {  throw new invalidUplineException(); }

«После броска» может сработать, но только в тех случаях, когда исключений не было.

0 голосов
/ 01 декабря 2011

Когда выдается исключение, выполнение скрипта переходит к следующему соответствующему блоку catch() (если вы находитесь внутри блока try{}) или полностью останавливается (если исключение не перехвачено). Это поведение не связано с PDO, это то, как исключения работают на всех языках, которые их поддерживают. Таким образом, часть $dbhandler = NULL; во втором примере никогда не будет выполнена. Вот простой тест, который вы можете запустить:

<?php

try{
    throw new Exception('This exception will be caught');
    echo 'Exception thrown, this line will not run' . PHP_EOL;
}catch(Exception $e){
    echo 'Exception was caught as expected' . PHP_EOL;
}

throw new Exception('This exception will not be caught. Script ends here.');
echo 'Exception thrown, this line will not run either.' . PHP_EOL;
0 голосов
/ 01 декабря 2011

Закрытие соединения PDO так же просто, как это:

$db = new PDO($dsn, $username, $password); // Make connection
$db = NULL; // Close connection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...