This is pretty useful when using PDO with MySQL after executing a stored procedure:
<?php
// PDO Connection Defintion
$query = "call custom_procedure()";
$stmt = $conn->query($query);
// Error checking
$stmt->fetch();
$stmt->closeCursor();
// Not calling closeCursor will error the query below as
// 2014 - Cannot execute queries while there are pending result sets.
$query = "select * from table";
$stmt = $conn->query($query);PDOStatement::closeCursor
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
PDOStatement::closeCursor
Референца за `pdostatement.closecursor.php` со подобрена типографија и навигација.
PDOStatement::closeCursor
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor — Closes the cursor, enabling the statement to be executed again
= NULL
, вашиот повик може да не успее. Повикајте Го затвора курсорот, овозможувајќи повторно да се изврши изјавата
ја ослободува врската со серверот за да може да се издаваат други SQL изјави, но ја остава изјавата во состојба што овозможува повторно да се изврши.
, вашиот повик може да не успее. Повикајте Овој метод е корисен за драјвери за бази на податоци кои не поддржуваат извршување на PDOStatement објект кога претходно извршен PDOStatement објект сè уште има недонесени редови. Ако вашиот драјвер за база на податоци страда од ова ограничување, проблемот може да се манифестира како грешка надвор од редослед.
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>Параметри
Оваа функција нема параметри.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Errors/Exceptions
Емитува грешка со ниво E_WARNING ако атрибутот PDO::ATTR_ERRMODE е поставен на PDO::ERRMODE_WARNING.
Фрла PDOException ако атрибутот PDO::ATTR_ERRMODE
е поставен на PDO::ERRMODE_EXCEPTION.
Примери
ако е овозможен колекторот за отпадоци, , вашиот повик може да не успее. Повикајте example
се имплементира или како опционален метод специфичен за драјверот (овозможувајќи максимална ефикасност), или како генерички PDO резервен механизам ако не е инсталирана специфична функција за драјверот. Генеричкиот PDO резервен механизам е семантички ист како пишување на следниот код во вашето PHP скрипта: $stmt Во следниот пример, , вашиот повик може да не успее. Повикајте on $stmt PDOStatement објектот враќа повеќе редови, но апликацијата зема само првиот ред, оставајќи го PDOStatement објектот во состојба на недонесени редови. За да се осигура дека апликацијата ќе работи со сите драјвери за бази на податоци, авторот вметнува повик до $otherStmt пред извршување на
<?php
/* Create a PDOStatement object */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Create a second PDOStatement object */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* Execute the first statement */
$stmt->execute();
/* Fetch only the first row from the results */
$stmt->fetch();
/* The following call to closeCursor() may be required by some drivers */
$stmt->closeCursor();
/* Now we can execute the second statement */
$otherStmt->execute();
?>Белешки од корисници 2 забелешки
In case this is helpful to anybody else who ends-up here after getting the following error:
SQLState: 24000 [Microsoft][ODBC SQL Server Driver]Invalid cursor state
PDOStatement :: closeCursor() did not fix the issue for me. However, adding SET NOCOUNT ON to the beginning of my stored procedure did.