Когда вызывать mysqli :: close - PullRequest
4 голосов
/ 31 января 2012

Когда я должен вызвать mysqli :: close?Я никогда не использовал операторы if для проверки успешности bind_param (), prep () и execute ().Должен ли я вызвать $ stmt-> close () в конце метода (ниже).Или я должен вызывать его после каждого условия, гарантирующего, что я закрываю соединение с базой данных, даже если процесс завершается неудачей на каком-то этапе, например, bind param.

public function function_name($id,$new_id ){
    $query = "UPDATE TABLE SET name = ? WHERE field = ? ";
    if($stmt=$this->prepare($query)){
        if($stmt->bind_param("is", $id, $new_id)){
            if($stmt->execute()){

            }else{//Could not execute the prepared statement
                $message = "Could not execute the prepared statement";
            }
        }else{//Could not bind the parameters
            $message = "Could not bind the parameters";
        }
    }else{
        $message = "Could not prepare the statement";
    }
    return $message
}

Ответы [ 4 ]

7 голосов
/ 31 января 2012

Когда PHP завершает работу, он корректно закрывает соединения с базой данных.

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

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

Что важно: неиспользуемые неиспользуемые данные, и если вы хотите избежать утечек памяти (которые в моем случае являются проблемой ядра PHP в этом случае), используйте:

mysqli_kill();
mysqli_close(); 

Thisкстати сокет тоже убит.

0 голосов
/ 31 января 2012

вы должны закрыть его, особенно после мультизапроса (http://php.net/manual/en/mysqli.multi-query.php), потому что вы можете получить проблемы с памятью. В противном случае закрытие не требуется.

0 голосов
/ 31 января 2012

Немного подумав, что вы могли бы создать другой метод с именем function_close и вызывать его после того, как вызвали метод function_name.

Таким образом, если вы перейдете на pdo или mongo, вам просто нужно будет выполнить рефакторингМеторды, а не каждый случай close.

0 голосов
/ 31 января 2012

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

То же самое касается операторов.Если выписка больше не будет использоваться, утилизируйте ее соответствующим образом.

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