There are many references around for returning a refcursor from a pgSQL function using pg_query. All essentially boil down to executing the following single statement (or some variation of it):
begin; select yourFunction(params...); fetch all in cursorname; commit;
In PDO, this doesn't work because PDO won't allow multiple statements submitted as a single statement (due to SQL injection detection). Instead, try this or similar:
<?php
$sql = 'select yourFunction(params...)';
$db = new PDO('pgsql:dbname=yourDBname');
$db->beginTransaction();
$cmd = $db->prepare($sql);
if ($cmd->execute()) {
if ($query = $db->query('fetch all in cursorname')) {
...processing...
$query->closeCursor();
$cmd->closeCursor();
}
}
$db->commit();
?>
کلاس PDOStatement
Introduction
نمایش جمله از پیش آماده و پس از اجرای جمله مجموعه نتیجه بازگردانده میشود.
Class synopsis
PDOStatement
implements
Traversable
{
/* Properties */
/* Methods */
bool bindColumn
( mixed $column
, mixed &$param
[, int $type
[, int $maxlen
[, mixed $driverdata
]]] )
bool bindParam
( mixed $parameter
, mixed &$variable
[, int $data_type = PDO::PARAM_STR
[, int $length
[, mixed $driver_options
]]] )
mixed fetch
([ int $fetch_style = PDO::FETCH_BOTH
[, int $cursor_orientation = PDO::FETCH_ORI_NEXT
[, int $cursor_offset = 0
]]] )
}Properties
- queryString
-
رشته پرس و جو استفاده شده.
Table of Contents
- PDOStatement->bindColumn — Bind a column to a PHP variable
- PDOStatement->bindParam — Binds a parameter to the specified variable name
- PDOStatement->bindValue — Binds a value to a parameter
- PDOStatement->closeCursor — Closes the cursor, enabling the statement to be executed again.
- PDOStatement->columnCount — Returns the number of columns in the result set
- PDOStatement->debugDumpParams — Dump an SQL prepared command
- PDOStatement->errorCode — Fetch the SQLSTATE associated with the last operation on the statement handle
- PDOStatement->errorInfo — Fetch extended error information associated with the last operation on the statement handle
- PDOStatement->execute — Executes a prepared statement
- PDOStatement->fetch — Fetches the next row from a result set
- PDOStatement->fetchAll — Returns an array containing all of the result set rows
- PDOStatement->fetchColumn — Returns a single column from the next row of a result set
- PDOStatement->fetchObject — Fetches the next row and returns it as an object.
- PDOStatement->getAttribute — Retrieve a statement attribute
- PDOStatement->getColumnMeta — Returns metadata for a column in a result set
- PDOStatement->nextRowset — Advances to the next rowset in a multi-rowset statement handle
- PDOStatement->rowCount — Returns the number of rows affected by the last SQL statement
- PDOStatement->setAttribute — Set a statement attribute
- PDOStatement->setFetchMode — Set the default fetch mode for this statement
rosko at zeta dot org dot au ¶
3 years ago
Dmitri Snytkine ¶
1 year ago
It looks like cloning PDOStatement object does not make any sense because while clone($sth) will not generate any errors, the returned object is not a new object but a reference to original PDOStatement object $sth.
