ACCESO A BASES DE DATOS ORACLE CON PHP - PowerPoint PPT Presentation

About This Presentation
Title:

ACCESO A BASES DE DATOS ORACLE CON PHP

Description:

... que se usa en todas las funciones o falso en el caso de que la conexi n falle. ... Devuelve falso o error. Ejecutar una sentecia. bool oci_execute (resource ... – PowerPoint PPT presentation

Number of Views:147
Avg rating:3.0/5.0
Slides: 22
Provided by: manuel111
Category:
Tags: acceso | bases | con | datos | oracle | php | falso

less

Transcript and Presenter's Notes

Title: ACCESO A BASES DE DATOS ORACLE CON PHP


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 oraclephp.
  • 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 )
  • lt?php  conn oci_connect(user', pass',
    'orcl')
  •   if (!conn)    e oci_error()
  •    print htmlentities(e'message')   exit 
  • ?gt
  • Devuelve un identificador que se usa en todas las
    funciones o falso en el caso de que la conexión
    falle.

7
  • Cerrar una conexión con la base de datos
  • bool oci_close ( resource connection )
  • lt?php  conn oci_connect(user', pass',
    'orcl')  if (!conn)    e oci_error()  
    print htmlentities(e'message')   exit 
    oci_close(conn)
  • ?gt
  • Devuelve true si se cierra y false si no.

8
  • 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.
  • lt?php
  • query 'SELECT FROM DEPARTMENTS'  stid
    oci_parse(conn, query)  if (!stid)    e
    oci_error(conn)   print htmlentities(e'mess
    age')   exit
  • ?gt
  • 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
  • Ejecutar una sentecia
  • bool oci_execute (resource stmt , int mode)
  • lt?php
  • query 'SELECT FROM DEPARTMENTS'  stid
    oci_parse(conn, query)  if (!stid)    e
    oci_error(conn)   print htmlentities(e'mess
    age')   exit
  • ?gt
  • 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
  • lt?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'me
    ssage')   exit    print 'lttable
    border"1"gt'  while (row oci_fetch_array(sti
    d, OCI_RETURN_NULLS))    print 'lttrgt'      
    foreach (row as item)          print
    'lttdgt'.(item?htmlentities(item)'nbsp').'lt/tdgt
    '              print 'lt/trgt'    print
    'lt/tablegt'  oci_close(conn)
  • ?gt

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-gt 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 userObelix, pass Dogmatix
  • SELECT FROM Users WHERE username 'Obelix' and
    password'Dogmatix'
  • Nombre de Usuario or 11
  • SELECT FROM Users WHERE username'' or 11--
    and password'
  • SELECT FROM Users WHERE username'' or 11

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
  • lt?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)?gt

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
  • lt?phpconexion 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
    row0." and ".row'ID'." is the sameltbrgt"  
    echo row1." and ".row'NAME'." is the
    sameltbrgt"?gt

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
  • ?
Write a Comment
User Comments (0)
About PowerShow.com