Когда следует использовать closeCursor () для операторов PDO?

Документация PHP на closeCursor() говорит, что это

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

Когда я использовал команду, хотя это, похоже, не имеет значения, если она есть или нет между моими заявлениями запроса, и я начинаю задаваться вопросом, нужен ли мне это вообще.

Разве можно использовать его для вызовов базы данных, которые не возвращают данные, а не те, которые это делают?

Это зависит от используемого драйвера. Я думаю, что для mysql это ничего не сделает, кроме как очистить результат инструкции. После вызова функции closeCursor () вы больше не можете вызвать fetch (). Однако выполнение инструкции снова не должно быть проблемой. Попытайтесь посмотреть на mysql_free_result () , это похоже на аналогичную вещь.

Чтобы ответить на вопрос для MySql

Как упоминалось NB перед тем, как выполнить () то же самое подготовленное PDOStatement.

EG: (это плохая практика, но простой пример, обычно вы бы выбрали ALL или JOIN. Более сложные скрипты, например, с вложенными запросами (см. Выше о JOIN), делают этот пример более жизнеспособным)

 <?php $ids = array( 1, 2 ); $sth = $pdo->prepare( "SELECT name FROM company WHERE id = :id" ); foreach( $ids as $id ) { $sth->execute( array( ':id' => $id ) ); $result = $sth->fetch( PDO::FETCH_ASSOC ); $sth->closeCursor(); echo $result['name'] . PHP_EOL; } unset( $result ); $sth = null; $pdo = null; ?> 

Также применительно к MySQL вы также можете установить атрибут PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY равным false, что требует, чтобы PHP всегда проверял базу данных и не нуждался в закрытии курсора. http://php.net/manual/en/mysqlinfo.concepts.buffering.php