Curso: Desarro||o de ap||cac|ones Web Crlsuna uenLe, 8afael alaclos lnLroduccln 1 3 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Introducc|n - P dlspone de llbrerlas para comunlcarse con dlversas bases de daLos: MySL (CpenSource, la que vamos a uullzar en esLe curso) u8M (8erkeley) lnformlx MS SCL (Mlcroso) Cracle 8 osLgreSCL (8erkeley-open source) Sybase 4 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Introducc|n - cmo funclona? GET prueba.php S Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 L[emp|o de programa n 1. Abrlr la conexln con el servldor de base de daLos 2. Selecclonar la base de daLos 3. ConsLrulr la query 4. Lanzar la query 3. 8ucle para mosLrar reglsLro a reglsLro 6. Cerrar la conexln Abrlr la conexln con la base de daLos 2 7 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Conex|n a |a base de datos - lnsLruccln mysql_connecL(), [unLo con Lres parmeLros: hosL al que nos conecLamos, nombre de usuarlo y conLrasena. - Ln modo local (localhosL = 127.0.0.1) <?php $conn = mysql_connect("localhost","mysql_user","mysql_pwd"); if (!$conn) { die('Error de conexin'); } /* Cdigo aqu */ mysql_close($conn); ?> 8 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Conex|n a |a base de datos - 1amblen es poslble uullzar varlables y desarrollar funclones <?php function Conectar() { $host="localhost"; $user="mysql_user"; $pass="shhh"; $conn = mysql_connect($host,$user,$pass); if (!$conn) { die('Error de conexin'); } return $conn; } Acceso.php 9 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Se|ecc|n de |a base de datos - Los cheros que accedan a la base de daLos lncluyen la funcln. <?php include("acceso.php"); $conn=Conectar(); if (!mysql_select_db("prueba",$conn)) { printf("ERROR: %s\n",mysql_error()); mysql_close($conn); die("Error al cambiar de base de datos\n"); } /* Cdigo aqu */ mysql_close($conn); 8eallzar querles 3 11 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 L[emp|o de consu|ta - una query se e[ecuLa con mysql_query. Se recomlenda comprobar el error. $query="SELECT nombre, apellidos FROM empleados WHERE salario<10000;"; $result=mysql_query($query,$conn); if (!$result) { printf("Error en la query: ".mysql_error()); mysql_close($conn); exit; } 12 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 L[emp|o de consu|ta - mysql_feLch_array convlerLe el resulLado de la query en un array con Loda la lnformacln de un reglsLro. - Los nombres de los elemenLos del array colnclden con los uullzados en la query $row=mysql_fetch_array($result); while ($row) { printf("Nombre: {$row['nombre']} {$row['apellidos']}<br>"); $row=mysql_fetch_array($result); } mysql_free_result($result); 13 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 kesumen de |as func|ones de acceso a MySL - mysql_connecL() :ConecLar con el servldor de bases de daLos. - mysql_selecL_db() :Selecclonar una base de daLos. - mysql_query() : Lnvlar la lnsLruccln SCL a la base de daLos. - mysql_num_rows($resulL) : CbLener numero de reglsLros - mysql_feLch_array($resulL) : CbLener daLos - mysql_free_resulL($resulL) : Llbera memorla - mysql_close() : Cerrar la conexln con el servldor. - mysql_error() : MuesLra el ulumo mensa[e de error - mysql_real_escape_sLrlng() : Cbuene cadena segura (ver ms adelanLe) lormularlos y aspecLos bslcos de segurldad 4 1S Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Consu|ta basada en formu|ar|o 1. ulsenar pglna web uullzando un edlLor P1ML 2. Converur a P e lnserLar el cdlgo de acceso a daLos 3. CbLener y proLeger los daLos del formularlo 4. ConsLrulr la query 3. Cenerar la sallda 16 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Arch|vo n Cdigo inicial HTML Query PHP Cdigo nal HTML 17 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Construcc|n de |a query if (isset($_GET['salary'])) { $salary=mysql_real_escape_string($_GET['salary']); //important $query='SELECT firstname, lastname, salary FROM users WHERE salary>={$salary};'; } else { /* No filter */ $query='SELECT firstname, lastname, salary FROM users;'; } $result=mysql_query($query,$conn); if (!$result) { die('Query error '.mysql_error()); } $row=mysql_fetch_array($result); while ($row) { printf("<tr>\n"); printf("<td>{$row['firstname']}</td><td>{$row['lastname']}</td>"); printf("<td>{$row['salary']}</td></tr>"); $row=mysql_fetch_array($result); } mysql_free_result($result); 18 Departamento de S|stemas Informncos Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI Desarro||o de ap||cac|ones web 2011 Aspectos de segur|dad - por que es lmporLanLe mysql_real_escape_string? query='SELECT name FROM users WHERE salary<=10000;' query='SELECT name FROM users WHERE salary<=10000; drop table users' 10000; drop table users; 10000 Lscue|a 1cn|ca Super|or de Ingen|er|a ICAI AlberLo Agullera 23 28013 Madrld 1el +34 91 342 28 00 lax + 34 91 342 31 76 lwww.lcal.upcomlllas.es www.upcom|||as.es