Это не правда.Если вам нужно использовать closeCursor, один из наиболее оптимальных вариантов - для команд вставки / обновления / удаления и редко для операторов SELECT, для которых вы уже получили результаты.
Например, если выбрать всезаписи из таблицы, затем выполните $ stmt-> fetch (), это на самом деле сразу же завершает задачу closeCursor, так как строки больше не находятся в неустановленном состоянии.
Из руководства:
Этот метод полезен для драйверов базы данных, которые не поддерживают выполнение объекта PDOStatement, когда ранее выполненный объект PDOStatement все еще имеет невыполненные строки.Если драйвер вашей базы данных страдает от этого ограничения, проблема может проявиться в ошибке из последовательности:
Когда вам действительно понадобится closeCursor, во время любого из следующих случаев:
- Если ваш драйвер БД не разрешает выполнение нового stmt, в то время как из предыдущего выполнения доступны невыполненные строки
- У вас есть несколько подготовленных операторов и вы хотите выполнить их один за другимдругой ($ stmt1-> execute (); $ stmt-> closeCursor (); $ stmt2-> execute (); $ stmt2-> closeCursor (); $ stmt3 ... и т. д.)
- У вас есть несколькоstmts, которые должны выполнить вставку / обновление / удаление внутри того же блока.Это верно, потому что, хотя вы не получаете обратно результаты строк mysql, вы ДОЛЖНЫ возвращать количество результатов для затронутых строк (что все еще является результатом).
- При использовании транзакций
- Когда вы хотите выдавать подготовленные операторы в стиле выбора и выполнять их, но не извлекаете данные до тех пор, пока
Когда вы этого не сделаетенужен оператор closeCursor:
- Если вы уже извлекли строки (как с $ stmt-> fetch ()) до того, как ваш следующий оператор будет выполнен.На этом этапе строки находятся в «извлеченном» состоянии и освобождают драйвер для выполнения новых операторов.
Так же полезно для закрытия курсора unset () (то есть: unset ($ stmt)) и установив для оператора значение null ($ stmt = null), открывая двери для встроенного сборщика мусора, чтобы все очистить.
См. руководство для получения дополнительной информации: http://php.net/manual/en/pdostatement.closecursor.php