La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ACCESO A BASES DE DATOS ORACLE CON PHP

Presentaciones similares


Presentación del tema: "ACCESO A BASES DE DATOS ORACLE CON PHP"— Transcripción de la presentación:

1 ACCESO A BASES DE DATOS ORACLE CON PHP
MANUEL BUTRÓN BLANES

2 Índice Introducción Qué necesito… Funciones básicas
Introducción a las bind variables Otras funciones.

3 Introducción Mejor dupla bajo web: oracle+php.
Muchos tipos de funciones. Diferentes para cada SGDB. El codigo no es portable. Uso de bind variables.

4 Qué necesito… Gestor de bases de datos oracle. Apache o IIS.
Php 5.0 para las funciones actuales. Editor highlight.

5 Operaciones básicas Conectarse a la base de datos.
Preparar una sentencia para su ejecución. Ejecutarla. Cerrar la conexión.

6 Establecer una conexión con la BD
oci_connect ( string username, string password [, string db [, string charset [, int session_mode]]] ) <?php   $conn = oci_connect(‘user', ‘pass', 'orcl');   if (!$conn) {    $e = oci_error();    print htmlentities($e['message']);    exit;   } ?> Devuelve un identificador que se usa en todas las funciones o falso en el caso de que la conexión falle.

7 bool oci_close ( resource connection )
Cerrar una conexión con la base de datos bool oci_close ( resource connection ) <?php   $conn = oci_connect(‘user', ‘pass', 'orcl');   if (!$conn) {    $e = oci_error();    print htmlentities($e['message']);    exit;   } oci_close($conn) ?> Devuelve true si se cierra y false si no.

8 oci_parse(resource connection, string query)
Preparar una sentencia oracle para su ejecución. oci_parse(resource connection, string query) Prepara la query usando el identificador que devuelve oci_connect y devuelve un sentecia identificadora, que puede ser usada con oci_bind_by name() o oci_execute principalmente pero tambien con otras funciones. <?php $query = 'SELECT * FROM DEPARTMENTS';   $stid = oci_parse($conn, $query);   if (!$stid) {    $e = oci_error($conn);    print htmlentities($e['message']);    exit; ?> Nota: Esta funcion no valida la query. La unica manera de validar si la query es una sentencia correcta de SQL es ejecutandola Devuelve falso o error.

9 bool oci_execute (resource stmt , [int mode])
Ejecutar una sentecia bool oci_execute (resource stmt , [int mode]) <?php $query = 'SELECT * FROM DEPARTMENTS';   $stid = oci_parse($conn, $query);   if (!$stid) {    $e = oci_error($conn);    print htmlentities($e['message']);    exit; ?> $r = oci_execute($stid, OCI_DEFAULT);   if (!$r) {    $e = oci_error($stid);    echo htmlentities($e['message']);    exit; Ejecuta una sentecia SQL previamente comprobada con oci_parse Devuelve un resultado dependiendo del tipo de query o false en caso de error.

10 <. php $conn = oci_connect(‘user', ‘pass', 'orcl'); if (
<?php   $conn = oci_connect(‘user', ‘pass', 'orcl');   if (!$conn) {    $e = oci_error();    print htmlentities($e['message']);    exit;   }   $query = 'SELECT * FROM DEPARTMENTS';   $stid = oci_parse($conn, $query);   if (!$stid) {    $e = oci_error($conn);    print htmlentities($e['message']);    exit;   }   $r = oci_execute($stid, OCI_DEFAULT);   if (!$r) {    $e = oci_error($stid);    echo htmlentities($e['message']);    exit;   }   print '<table border="1">';   while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS)) {    print '<tr>';        foreach ($row as $item) {          print '<td>'.($item?htmlentities($item):' ').'</td>';        }        print '</tr>';   }   print '</table>';   oci_close($conn); ?>

11 Introducción a las bind variables
Ligar variables en un enunciado SQL. Ventaja sobre MySQL o ACCESS que no manejan bind nativamente. Pre-compilacion de enunciados SQL. Optimización. Aumento importante de velocidad al insertar. SQL inalterable. Medida de seguridad ante el SQL injection.

12 Introducción a las bind variables II
Sintaxis-> :bindVariable oci_bind_by_name bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )

13 Ejemplo web insegura. SQL injection.
Ejecutar sentecias SQL mediante la aplicación sin la debida autentificación. Login.asp; user:Obelix, pass: Dogmatix SELECT * FROM Users WHERE username= 'Obelix' and password='Dogmatix' Nombre de Usuario: ‘ or 1=1— SELECT * FROM Users WHERE username='' or 1=1-- and password='‘ SELECT * FROM Users WHERE username='' or 1=1

14 Ejemplo seguridad con bind variables
$SQL = "SELECT * FROM TECNICOS WHERE USUARIO = :USUARIO AND CLAVE = :CLAVE"; $Sentencia =oci_parse ($Conexion, $SQL);   oci_bind_by_name ($Sentencia,”:USUARIO", $USUARIO, -1); oci_bind_by_name ($Sentencia, “:CLAVE", $CLAVE, -1);   oci_execute ($Sentencia);

15 Insertar con bind variables
<?php   // Before running, create the table:   //  CREATE TABLE MYTABLE (mid NUMBER, myd VARCHAR2(20));   $conn = oci_connect(‘user', ‘pass', 'orcl');   $query = 'INSERT INTO MYTABLE VALUES(:myid, :mydata)';   $stid = oci_parse($conn, $query);   $id = 60;   $data = 'Some data';   oci_bind_by_name($stid, ':myid', $id);   oci_bind_by_name($stid, ':mydata', $data);   $r = oci_execute($stid);   if ($r)    print "One row inserted";   oci_close($conn); ?>

16 Funciones auxiliares array oci_fetch_array ( resource statement [, int mode] ) devuelve un array asociativo o numerico o ambos, con el resultado, false en caso de error oci_both oci_assoc oci_num oci_return_nulls oci_return_lobs <?php $conexion = oci_connect(“user", “pass"); $SQL= "SELECT id, name FROM fruits"; $sentencia = oci_parse ($conexion, $SQL); oci_execute ($sentencia); while ($row = oci_fetch_array ($sentencia, OCI_BOTH)) {    echo $row[0]." and ".$row['ID']." is the same<br>";    echo $row[1]." and ".$row['NAME']." is the same<br>"; } ?>

17 Funciones auxiliares II
int oci_fetch_all ( resource statement, array &output [, int skip [, int maxrows [, int flags]]] ) Le pasamos el array por referencia para que lo componga y nos devuelve el numero de filas que han sido imprimidas en el array oci_num_fields(sentencia), devuelve el numero de columas en la sentencia. oci_num_rows(sentencia), devuelve el numero de filas en la sentencia.

18 Otras funciones oci_commit, oci_roolback, para control de transacciones oci_error, devuelve el ultimo error oci_server_version, devuelve la version del servidor oci_statement_type, devuelve el tipo de sentencia(select,insert…)

19 Otras funciones II oci_password_change, cambia la contraseña de acceso
oci_field_ is null, precision,scale,size,type. oci_pconnect, se conecta a oracle usando una conexión permanente. oci_field_name, oci_row_name

20 Bibliografía php.net Wikipedia

21 ?


Descargar ppt "ACCESO A BASES DE DATOS ORACLE CON PHP"

Presentaciones similares


Anuncios Google