Forum und email

SDO_DAS_Relational::executePreparedQuery

(No version information available, might be only in CVS)

SDO_DAS_Relational::executePreparedQuery — Exécute une requête SQL passée comme requête préparée, avec une liste de valeurs à substituer pour les paramètres fictifs, et retourne les résultats comme un graphique de données normalisé.

Description

SDODataObject SDO_DAS_Relational::executePreparedQuery ( PDO $database_handle , PDOStatement $prepared_statement , array $value_list [, array $column_specifier ] )
Warning

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Exécute une requête donnée sur une base de données relationnelle, en utilisant le descripteur de base de données PDO fourni. Elle diffère de la fonction simple executeQuery() puisqu'elle prend des requêtes préparées et une liste de valeurs. Ceci est l'appel approprié lorsque vous voulez utiliser une requête qui doit être appelée un certain nombre de fois avec des arguments différents et il y a donc un avantage de performance à être préparée une seule fois. Elle est utile aussi pour les requêtes SQL qui contiennent des valeurs qui varient prises d'une source qui ne peut pas être totalement sûre. Dans ce dernier cas, il est peu sécuritaire de construire une requête SQL en concaténant simplement les parties de la requête ensemble, puisque les valeurs peuvent convenir des morceau de SQL. Pour se protéger de ceci, d'une prétendue attaque par injection SQL, il est plus sécuritaire de préparer la requête SQL avec des paramètres fictifs (aussi connu sous le nom de marqueurs, noté '?') et fournir une liste de valeurs qui devra être substituée dans un argument séparé. Autrement, cette fonction est la même que executeQuery() puisqu'elle utilise le modèle qui était bâti à partir des méta-données pour interpréter le jeu de résultats et retourner un graphique de données.

Liste de paramètres

PDO_database_handle

Construit en utilisant l'extension PDO. Une ligne typique pour construire un descripteur de base de données PDO devrait ressembler à ceci :

$dbh = new PDO("mysql:dbname=COMPAGNIEYDB;host=localhost",DATABASE_USER,DATABASE_PASSWORD);

prepared_statement

Une requête SQL préparée qui sera exécutée sur la base de données. Il aura été préparé par la méthode prepare() de PDO.

value_list

Un tableau de valeurs à être substituées dans la requête SQL à la place des paramètres fictifs. Dans le cas qu'il n'y a pas de paramètres fictifs ou de marqueurs dans la requête SQL, alors cet argument peut être spécifié comme NULL ou en tant qu'un tableau vide.

column_specifier

Le DAS Relationnel doit examiner le jeu de résultats et pour chaque colonne, provenant de quelle table et quelle colonne de la table il vient. Dans certaines circonstances, il peut trouver les informations pour lui-même, mais la plupart du temps il ne le peut pas. Dans ces cas, une colonne spécifique est requise, qui est un tableau qui identifie les colonnes. Chaque entrée dans le tableau est simplement une chaîne de caractères dans la forme table-name.column_name.

Le spécificateur de colonne est requis lorsqu'il y a des noms de colonnes similaires dans les méta-données de base de données. Par exemple, dans une base de données utilisée dans ces exemples, toutes les tables ont une colonne id et une colonne nom. Lorsque DAS Relationnel récupère le jeu de résultats à partir de PDO, il peut le faire avec l'attribut PDO_FETCH_ASSOC, ce qui permettra aux colonnes dans les jeux de résultats d'être marquées avec un nom de colonne, mais on ne pourra pas distinguer les entrées similaires. Alors cela fonctionnera seulement lorsqu'il y aura aucune entrée similaire possible dans les jeux de résultats.

Pour résumer, spécifier un tableau de spécificateurs de colonne lorsqu'il y a une incertitude à propos des colonnes qui pourraient venir de quelle table. Il faut l'omettre seulement lorsque chaque nom des colonnes dans les méta-données de base de données est unique.

Tous les exemples dans la section d'Exemples utilisent un spécificateur de colonne. Il y a un exemple dans le dossier Scenarios de l'installation qui ne fait pas : il ne fonctionne seulement avec la table employe et parce que il travaille seulement avec une seule table, il ne peut y avoir des noms de colonnes similaires.

Valeurs de retour

Retourne un graphique de données. Spécifiquement, elle retourne un objet racine d'un type spécial. Sous cet objet de racine se trouveront les données du jeu de résultat. L'objet de racine aura une propriété de valeurs multiples contenue avec le même nom que le type racine d'application spécifié dans le constructur, et la propriété continuera un ou plusieurs objets de donnés du type de racine de l'application.

Dans le cas que la requête aucune donnée, l'objet spécial de racine pour le type de racine de l'application sera vide.

Erreurs / Exceptions

SDO_DAS_Relational::executePreparedQuery() peut jeter une exception SDO_DAS_Relational_Exception si elle n'est pas capable de construire le graphique de données correctement. Cela peut arriver pour un certains nombres de raisons : par exemple, si elle trouve qu'elle n'a pas de clés primaire dans le jeu de résultats pour tous les objets. Le DAS Relationnel attrape toutes les exceptions de PDO et obtient des informations de diagnostique de PDO qui inclut un SDO_DAS_Relationnal_Exception qui sera alors jeté.

Exemples

Example#1 Récupération d'un objet de données en utilisant executePreparedQuery()

Dans cet exemple, un simple objet de données est récupéré de la base de données - ou possiblement plus d'un s'il y a plus d'une compagnie appelée 'Acme'. Pour chaque compagnie retournée, les propriétés nom et id sont affichées.

D'autres exemples d'utilisation de executePreparedQuery() peuvent être trouvés dans le code d'exemple fourni dans sdo/DAS/Relational/Scenarios.

<?php
require_once 'SDO/DAS/Relational.php';
require_once 
'company_metadata.inc.php';

/**************************************************************
 * Construit le DAS avec les méta-données
 ***************************************************************/
$das = new SDO_DAS_Relational ($database_metadata,'compagnie',$SDO_reference_metadata);

/**************************************************************
 * Récupère une connexion à la base de données
 ***************************************************************/
$dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);

/**************************************************************
 * Effectue une requête pour obtenir un objet compagnie - il pourrait y en
 * avoir plus s'ils existaient
 * Utilise une requête préparée avec des paramètres fictifs.
 ***************************************************************/
$nom 'Acme';
$pdo_stmt $dbh->prepare('select nom, id from compagnie where nom=?');
$root $das->executePreparedQuery(
    
$dbh
    
$pdo_stmt,
    array(
$nom), 
    array(
'compagnie.nom''compagnie.id'));

/**************************************************************
 * Affiche le nom et son id
 ***************************************************************/
foreach ($root['compagnie'] as $compagnie) {
    echo 
"Compagnie obtenue de la base de données a le nom de = " 
    
$compagnie['nom'] . " et son id est " $compagnie['id'] . "\n";
}
?>