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();
?>
La classe PDOStatement
Introduction
Représente une requête préparée et, une fois exécutée, le jeu de résultats associé.
Synopsis de la classe
PDOStatement
PDOStatement
implements
Traversable
{
/* Propriétés */
/* Méthodes */
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
]]] )
array fetchAll
([ int $fetch_style = PDO::FETCH_BOTH
[, int $column_index = 0
[, array $ctor_args = array()
]]] )
}Propriétés
- queryString
-
chaîne de caractères utilisée pour la requête.
Sommaire
- PDOStatement->bindColumn — Lie une colonne à une variable PHP
- PDOStatement->bindParam — Lie un paramètre à un nom de variable spécifique
- PDOStatement->bindValue — Associe une valeur à un paramètre
- PDOStatement->closeCursor — Ferme le curseur, permettant à la requête d'être de nouveau exécutée
- PDOStatement->columnCount — Retourne le nombre de colonnes dans le jeu de résultats
- PDOStatement->debugDumpParams — Détaille une commande préparée SQL
- PDOStatement->errorCode — Récupère le SQLSTATE associé lors de la dernière opération sur la requête
- PDOStatement->errorInfo — Récupère les informations sur l'erreur associée lors dernière opération sur la requête
- PDOStatement->execute — Exécute une requête préparée
- PDOStatement->fetch — Récupère la ligne suivante d'un jeu de résultat PDO
- PDOStatement->fetchAll — Retourne un tableau contenant toutes les lignes du jeu d'enregistrements
- PDOStatement->fetchColumn — Retourne une colonne depuis la ligne suivante d'un jeu de résultats
- PDOStatement->fetchObject — Récupère la prochaine ligne et la retourne en tant qu'objet
- PDOStatement->getAttribute — Récupère un attribut de requête
- PDOStatement->getColumnMeta — Retourne les métadonnées pour une colonne d'un jeu de résultats
- PDOStatement->nextRowset — Avance à la prochaine ligne de résultats d'un gestionnaire de lignes de résultats multiples
- PDOStatement->rowCount — Retourne le nombre de lignes affectées par le dernier appel à la fonction PDOStatement::execute()
- PDOStatement->setAttribute — Définie un attribut de requête
- PDOStatement->setFetchMode — Définit le mode de récupération par défaut pour cette requête
PDOStatement
rosko at zeta dot org dot au
03-Dec-2009 01:50
03-Dec-2009 01:50
james dot ellis at gmail dot com
07-Jul-2009 01:25
07-Jul-2009 01:25
The query string used in a PDOStatement can be found using the (undocumented) property 'queryString'
<?php
//$stm is a prepared PDOStatement
print $stm->queryString
//example result
//SELECT firstname, lastname FROM user where id = :id
?>
