lunedì 8 ottobre 2018

Come connettersi ad oracle da php

Il database per eccellenza di chi sviluppa in php è sicuramente il mysql, questo lo sanno tutti.
Ma se vi dicessi che mysql è una sorta di versione free ridotta di oracle? :p
Bene, se nella vostra azienda non sono solo opensourcisti ed avete a disposizione anche questo signor database, potrebbe capitarvi la necessità di dover pescare dati dal php ad oracle, direttamente, senza server linkati o diavolerie simili (che alla lunga possono dare problemi).

Vediamo dunque come fare per potersi collegare ad oracle da php, in modo tale da poter inserire / modificare / cancellare dati su un database oracle presente su un altro server.


Come connettersi ad oracle da php


Prima di passare al codice da utilizzare per effettuare questa connessione, occorre agire sul php.ini per poter abilitare un'estensione necessaria per far parlare oracle con il php, trattasi della php_oci8.

Come connettersi ad oracle da php

A seconda della versione di oracle con cui dovete parlare, dovrete abilitare/installare una dll piuttosto che un'altra (es. php_oci8_11g o php_oci8_12c).
Diciamo che in linea di massima la versione 12c dovrebbe essere quella corretta per le più recenti versioni di oracle.
Ad ogni modo, se avete wamp, per abilitare le estensioni basta un click, altrimenti basta andare nel php.ini ed al paragrafo Extensions, scommentare (togliendo il punto e virgola prima della stringa) o aggiungere (se non presente) la seguente riga:
extension=php_oci8_12c.dll
poi riavviare il webserver (o wamp) per rendere effettive le modifiche.

Adesso che la parte di configurazione è terminata, vediamo subito il codice necessario per potersi collegare ad oracle da una pagina php:

<?php
$conn=oci_connect('username','password','server/database');
if(!$conn)
{
$e=oci_error();
trigger_error(htmlentities($e['message'],ENT_QUOTES),E_USER_ERROR);
}
else
{
$stid = oci_parse($conn, 'SELECT campo FROM tabella_oracle WHERE condizione');
oci_execute($stid);
while(($row=oci_fetch_array($stid, OCI_BOTH))!=false)
{
echo $row['campo'];
}
}
?>


Da queste poche righe di codice si evince che la funzione necessaria per collegarsi ad oracle è la oci_connect.
Superata la connessione senza errori, si può sfogliare la tabella del database ed ottenere tutti i campi che si vuole, utilizzando più o meno la sintassi a cui si è abituati per ottenere i risultati delle query con il php.

Da tenere presente inoltre che potrebbe essere necessario specificare il nome esatto dei campi, compreso di maiuscole e minuscole (case sensitive).

La sintassi per eseguire query su oracle da php è la oci_excecute, che ovviamente può utilizzata anche per insert ed update, oltre che per sfogliare tabelle.
Inutile dire che anche per dialogare con oracle è vitale parsare le variabili da passare al db, per evitare il rischio del terribile sql injection.

Che altro dire sull'agomento?
Niente direi, a parte il fatto che se dovete connettervi ad una versione vecchia di oracle (ad esempio la 9), da una macchina con su un php nuovo, potreste faticare non poco per riuscire a reperire le giuste dll della oci (idealmente la 11c), senza le quali a video nella vostra bella pagina php avrete il seguente messaggio d'errore: "Call to undefined function oci_connect()".
Io ho perso più tempo ad aggiustare l'aspetto sistemistico della cosa, piuttosto che a fare uno script complesso per fare una migrazione da oracle a mysql!
Ad ogni modo, per i posteri, io ho risolto questo errore di connessione scaricando l'oracle instant client per la mia versione di windows (https://www.oracle.com/database/technologies/instant-client/downloads.html) e copiando i file oci.dll, oraociei12.dll (o versione scaricata) e oraons.dll nella cartella bin di apache del mio wamp.

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon