html5-img
1 / 21

ACCESO A BASES DE DATOS ORACLE CON PHP

ACCESO A BASES DE DATOS ORACLE CON PHP. MANUEL BUTRÓN BLANES. Índice. Introducción Qué necesito… Funciones básicas Introducción a las bind variables Otras funciones. Introducción. Mejor dupla bajo web: oracle+php. Muchos tipos de funciones. Diferentes para cada SGDB.

janet
Download Presentation

ACCESO A BASES DE DATOS ORACLE CON PHP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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. 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. 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 (!$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):'&nbsp;').'</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. 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>";}?> Funciones auxiliares

  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. ?

More Related