Docstoc

mbb

Document Sample
mbb Powered By Docstoc
					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.
 El codigo no es portable.
 Uso de bind variables.
Qué necesito…
 Gestor de bases de datos oracle.
 Apache o IIS.
 Php 5.0 para las funciones actuales.
 Editor highlight.
Operaciones básicas
 Conectarse a la base de datos.
 Preparar una sentencia para su
  ejecución.
 Ejecutarla.
 Cerrar la conexión.
 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.
 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.
 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.
 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.
<?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);
?>
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.
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]] )
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
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);
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);
  ?>
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>";
    }
    ?>
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.
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…)
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
Bibliografía
 php.net


 Wikipedia
?

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:5
posted:9/24/2011
language:Spanish
pages:21