Conectar PHP y Oracle

En esta página:
Demo Github
Oracle Database es quizás el mejor sistema de gestión de base de datos objeto-relacional, pero que tal si lo probamos en una web con tambien quizás uno de los mejores lenguajes de Programación Web, hablo de PHP. De solo pensarlo podríamos obtener Consultas muy rápidas y persistentes que valdría la pena usar siempre estas Potentes herramientas.
En este tutorial les voy a explicar como conectar PHP y Oracle Database, logrando esto pueden crear un potente CRUD para sus aplicaciones Web.
Nota: La demo esta corriendo en un VPS, instale Oracle DB para que interactue con PHP.
Bueno vamos a por ello.
Pasos para Conectar PHP y Oracle
Hay varias formas, pero la más moderna y mantenida es usar la extensión OCI8 (Oracle Call Interface) o el driver PDO_OCI.
1. En Linux (Ubuntu/Debian)
Ejecuta los siguientes comandos:
1 2 3 4 5 |
sudo apt update sudo apt install php-pear php-dev libaio1 sudo pecl install oci8 |
Cuando pecl te pregunte por la ruta del Instant Client de Oracle, ponla (ejemplo: /usr/lib/oracle/21/client64/lib).
Luego agrega en tu php.ini:
1 2 3 |
extension=oci8.so |
2. En Windows
Sigue los siguiente pasos para hacerlo:
2.1. Si no tienes el cliente de Oracle, puedes descargarlo desde este enlace.
2.2 Descomprime en C:\oracle\instantclient_21_9 (por ejemplo).
2.3. Agrega esa ruta al PATH del sistema.
2.4. Si no lo tienes, descarga el php_oci8.dll compatible con tu versión de PHP (de la página oficial de PHP o PECL).
2.5. Configura el archivo php.ini que esta adentro de la carpeta PHP y descomentamos la libreria oci_811g.dll, quitamos el punto y coma que esta al inicio:
1 2 3 |
;extension=php_oci8_11g.dll |
Debe quedar asi:
1 2 3 |
extension=php_oci8_11g.dll |
Ahora creamos nuestra tabla en nuestra base de datos:
3. Crea una base de datos (bd.sql)
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE "POSTRES" ( "ID_POSTRE" NUMBER(*,0), "NOMBRE" VARCHAR2(50) NOT NULL ENABLE, "PRECIO" VARCHAR2(50) NOT NULL ENABLE, "STOCK" VARCHAR2(50) NOT NULL ENABLE, "DETALLES" VARCHAR2(50) NOT NULL ENABLE, PRIMARY KEY ("ID_POSTRE") ENABLE ) ; |
Ahora, creamos nuestra conexión mediante PHP:
4. Agrega el siguiente código PHP (script.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// Conecta al servicio XE (esto es, una base de datos) en el servidor "localhost" $conn = oci_pconnect('usuario', 'password', 'localhost/XE', 'AL32UTF8'); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM postres ORDER BY nombre ASC'); oci_execute($stid); echo "<table class='table table-striped'>\n"; echo "<thead>"; echo "<tr>"; echo "<th>ID</th>"; echo "<th>Nombre</th>"; echo "<th>Precio</th>"; echo "<th>Stock</th>"; echo "<th>Detalles</th>"; echo "</tr>"; echo "</thead>"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>\n"; foreach ($row as $item) { echo "<td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; |
5. Conectar con PDO (opcional, más portable)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php try { $conn = new PDO("oci:dbname=//localhost:1521/XEPDB1;charset=AL32UTF8", "mi_usuario", "mi_password"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); foreach ($conn->query("SELECT * FROM empleados") as $row) { echo $row['NOMBRE'] . "<br>"; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?> |
Listo !
Recomendaciones importantes
Te dejo estas recomendaciones para tu trabajo con PHP y Oracle:
- Driver: Usa OCI8 si quieres funciones específicas de Oracle (mejor rendimiento).
- Instant Client: Es obligatorio para conectarte.
- Charset: Siempre define charset=AL32UTF8 si trabajas con acentos o caracteres especiales.
- Prueba la conexión: Usa tnsping o sqlplus antes de probar en PHP para asegurarte que Oracle responde.
Espero les sirva de mucho el Tutorial.
Síguenos en nuestras Redes Sociales y demás canales digitales para que no te pierdas nuestros próximos contenidos.
Hasta nuestro siguiente artículo !
Social
Redes Sociales (Developers)
Redes Sociales (Digital)