> Tech > Dossier DB2 : Extraire des données avec PHP

Dossier DB2 : Extraire des données avec PHP

Tech - Par Sharon L. Hoffman - Publié le 06 avril 2011
email

Tirez parti de PHP/SQL pour accéder aux données de DB2 for i.

Beaucoup de développeurs i s'intéressent à PHP parce qu'il facilite des tâches qui seraient plus délicates avec RPG, comme invoquer des services web. Cependant, ajouter PHP à votre attirail de programmation ne signifie pas pour autant abandonner RPG. PHP vient plutôt compléter et étendre les applications existantes.

Par exemple, vous pouvez afficher des données provenant de votre fichier clients DB2 for i dans une page web, ou envoyer des données DB2 for i à un service web. Vous pouvez écrire des données avec RPG et les lires avec PHP ou inversement. Vous pouvez passer des paramètres d'un programme CL à un script PHP, exécuter un programme RPG existant à partir de PHP pour calculer des remises client, ou utiliser une file d'attente de données pour établir la communication entre votre code PHP et votre code RPG. De toutes ces possibilités, celle dont vous aurez besoin en premier sera l’accès aux données DB2 for i à partir de PHP.

Dossier DB2 : Extraire des données avec PHP


Dans le kit PHP for i5/OS, Zend offre deux moyens différents d’accéder aux données DB2 for i : des fonctions qui permettent l’accès au niveau enregistrement et l’accès SQL.

Ici, je me concentre sur la troisième option pour accéder aux données DB2 for i à partir de PHP : les extensions DB2 PHP génériques. Cette approche présente des avantages – particulièrement en présence de développeurs PHP non familiarisés avec l’IBM i – parce que les extensions DB2 génériques ne demandent aucune connaissance spécifique d’IBM i. Les extensions DB2 génériques semblent également plus faciles à dépanner que les options du kit PHP for i5/OS. Quel que soit votre choix, il faut très peu de lignes de code pour lier le code PHP aux données DB2 for i.

Établir des connexions

La première et plus importante étape quand on accède aux données DB2 for i à partir de PHP, est d’établir une connexion avec la base de données (A en figure 1, voir ci-dessous). Quand vous utilisez les extensions DB2 le nom du système est *LOCAL et il doit être tout en majuscules. Aucun ID ou mot de passe utilisateur n’est nécessaire. Vous n’avez pas à fournir une information d’identification (sign-on) parce que le script PHP tourne sur IBM i sous le profil PHP NOBODY. Assurez-vous quand même que ce profil (NOBODY) à l’autorité suffisante pour exécuter les instructions SQL dans votre script PHP. Après avoir établi une connexion avec la base de données DB2 for i, vous devez créer une instruction SQL (B en figure 1). Dans ce cas, l’instruction SQL est codée en dur et stockée dans la variable PHP $sqlUpdate qui est exécutée en C. Les variables PHP sont reconnaissables au fait que leurs noms commencent toujours par un signe dollar ($). Bien que l’exemple de la figure 1 fonctionne, vous voudrez généralement utiliser l’information stockée dans les variable PHP pour mettre à jour vos données, comme le montre la figure 2. En A de la figure 2, le code construit une instruction de mise à jour SQL qui définit les valeurs des colonnes DB2 for i en utilisant les données stockées dans les variables PHP. (Pour les besoins de l’illustration, les valeurs des variables sont définies juste avant l’utilisation, mais il est facile d’incorporer ce code PHP dans une page HTML ou les utilisateurs peuvent choisir l’État et le code postal.).

Le SQL en A de la figure 2 donne à la colonne CusState. la valeur $newState. Si la variable contient des données caractères, comme dans cet exemple, vous devez mettre le nom de variable entre guillemets quand vous construisez la variable d’instruction SQL. Ainsi, quand l’instruction SQL est construite, le contenu de la variable (CA dans cet exemple) est bien entre guillemets. En B, la figure 2 inclut une instruction en écho qui montre la valeur de l’instruction SQL une fois que toutes les variables ont été évaluées : c’est bien pratique pour le débogage. La sortie de l’instruction en écho ci-dessous montre l’instruction SQL après les substitutions de variables :

Update libname.customer set CusState = ‘CA’ where CusZip5 = 98123

La figure 2 inclut aussi un peu de traitement et de reporting d’erreurs pour indiquer si la connexion a réussi, si l’instruction SQL s’est bien exécutée, et, si tel n’est pas le cas, quelle erreur a été signalée par la base de données. Dans un environnement de production, le traitement d’erreurs sera plus poussé. Par exemple, il serait stupide de tenter la mise à jour si la connexion a échoué.

Il y a une affinité naturelle entre un jeu de résultats SQL et les puissantes possibilités de matrice de PHP. Après avoir vu comment on peut utiliser PHP et SQL pour mettre à jour les données DB2 for i, voyons comment profiter de ces deux structures complémentaires pour traiter le contenu d’un jeu de résultats.

Figure 1

A – $SystemiConnection = db2_connect(“*LOCAL”, “”, “”);
B – $sqlUpdate = “Update libname.customer set CusState = ‘CA’ where CusZip5 = 98123”;
C – $sqlResult = db2_exec($SystemiConnection, $sqlUpdate);
?>

Figure 2

/* Connect to the i5/OS system where PHP code is running */
$SystemLocation = “*LOCAL”;
$UserID = “”;
$Password = “”;
$SystemiConnection = db2_connect($SystemLocation, $UserID, $Password);
if ($SystemiConnection) {
echo (“Successful connection to System i
“);
} else {
echo (“Unable to connect to System i
“);
}
/* Build the qualified file name */
$FileName = ‘libname’;
$FileName .= “.”;
$FileName .= “customer”;
$newState = ‘CA’;
$selectZip = 98123;

A – $sqlUpdate = “Update $FileName set CusState = ‘$newState’ where CusZip5 = $selectZip”;
B – echo (“The SQL statement is: $sqlUpdate
“);

$sqlResult = db2_exec($SystemiConnection, $sqlUpdate);
if (!$sqlResult) {
$errMsg = db2_stmt_errormsg();
echo (“Unable to update data. The error is $errMsg
“);
}
?>

Téléchargez cette ressource

Comment lutter contre le Phishing ?

Comment lutter contre le Phishing ?

Dans un environnement cyber en constante mutation, le phishing évolue vers des attaques toujours plus sophistiquées combinant IA, automatisation et industrialisation. Une réalité complexe qui exige des mesures de sécurité avancées et repensées au-delà de l’authentification multifacteur. Découvrez les réponses technologiques préconisées par les experts Eviden et les perspectives associées à leur mise en œuvre.

Tech - Par Sharon L. Hoffman - Publié le 06 avril 2011