Php Con Mysql

download Php Con Mysql

of 21

Transcript of Php Con Mysql

PHP con MySQL: Introduccin a SQLSQL(Structured query language) es el lenguaje para interactuar con las bases de datos, el cual nos permitir insertar registros, actualizar registros, buscar registros as como manipular tablas.El lenguaje SQL es semejante en todos los servidores de base de datos salvo pequeas diferencias, en nuestro caso veremos una gua de SQL para MySQL. Los ejemplos los puedes probar directamente en la lnea de comandos de MySQL o en algn cliente comophpMyAdminoNavicat.

Preparando los datosPara nuestro ejemplo imaginemos que necesitamos almacenar los datos de una empresa. Para cada empresa necesitamos guardar: nombre, direccin, telfono y una imagen con su logo. Entonces necesitaremos crear una tabla a la que llamaremos empresa la cual tendr 5 campos: id: ser el identificador (interno) de la empresa el cual ser un nmero entero. nombre: es el campo que aceptar una cadena de texto con el nombre de la empresa. direccion: campo que guardar una cadena de texto con la direccin de la empresa. telefono: es un campo que aceptar solo nmeros que representan el telfono de la empresa. imagen: es el campo donde guardaremos el nombre del archivo del logo de la empresa.

Crear tablas con SQLPara definir la estructura de la tabla utilizaremosCREATE TABLE, donde se asigna el nombre de la tabla as como cada uno de los campos indicando que tipos de datos vamos a almacenar. Entre los principales tipos de datos disponibles tenemos: int: que permite guardar nmeros enteros. float: permite almacenar datos decimales. date: para guardar fechas, el formato de la fecha esaaaa-mm-dd. datetime: es para guardar fecha y hora, el formato esaaaa-mm-dd hh:mm:ss. time: para almacenar la hora, el formato de la hora eshh:mm:ss. char(n): almacena una cadena de texto de longitud fijan(De 0 a 255 caracteres). varchar(n): para cadenas de tamao variable de hastancaracteres (De 0 a 255). textes un campo para almacenar textos de hasta 65535 caracteres.

Para nuestro ejemplo crearamos la tabla con 5 campos, donde el primero de ellos ser el identificador de la empresa que ser un entero que ser ir auto-incrementando.[SQL]CREATE TABLE empresa (id int(11) NOT NULL AUTO_INCREMENT,nombre varchar(180),direccion varchar(180),telefono int(8),imagen varchar(50))[/SQL]

Notese que por cada campo definimos el tipo de dato que puede almacenar. Los campos nombre y direccin aceptan textos de hasta 180 caracteres mientras que el campo imagen solo acepta 50 caracteres como mximo.

Insertar datos con SQLPara insertar datos en las tablas haremos uso de la sentenciaINSERT INTO, para ello podemos indicar los campos con sus respectivos valores, esto respetando los tipos de datos aceptados.Para nuestra tabla recin creada, insertaremos registros de la siguiente forma:[SQL]INSERT INTO empresa (nombre, direccion, telefono, imagen)VALUES (Apple, 1 Infinite Loop, Cupertino, 89961010, apple.png)[/SQL]

Como se aprecia no es necesario incluir el dato para elidpor el del tipo AUTO_INCREMENT lo cual significa que se crear automticamente y con un valor incrementado en 1 al anterior registro.Si estamos insertando todos los valores de una tabla, podramos obviar los nombres de los campos si mantenemos el mismo orden en el que fueron creados los campos.

[SQL]INSERT INTO empresaVALUES (Apple, 1 Infinite Loop, Cupertino, 89961010, apple.png)[/SQL]

Tambin se pueden insertar solo algunos campos de la tabla y no necesariamente en el orden en que fueron creados los campos en donde si debemos indicar los nombres de los campos, por ejemplo:

[SQL]INSERT INTO empresa (nombre, logo)VALUES (Apple, apple.png)[/SQL]

Los campos para los que no asignamos valores tendrn valores nulos o el valor por defecto que hayamos definido en la creacin de la tabla.

Editar datos con SQLPara actualizar datos de los registros de una tabla se puede utilizarUPDATE, donde indicamos la tabla donde se harn los cambios, los campos a reemplazar con sus respectivos valores asi como la condicin que se debe cumplir para realizar el cambio de los datos.Para hacer uso de estas condiciones, MySQL provee de funciones de comparacin como: =para comparar si dos valores son iguales. para comparar si dos valores son diferentes. !=para comparar si dos valores son diferentes. Igual al operador . prueba si el datos es mayor a otro. IS NULLdevuelve verdadero si el campo es nulo. IS NOT NULLverdadero si el campo no es nulo.

Adicionalmente se pueden utilizar las funciones booleanas comoNOT,AND,ORyXOR.Continuando con nuestro ejemplo, suponiendo que tenemos registrada una empresa con el identificador 57, podramos actualizar los datos de la siguiente forma:

[SQL]UPDATE empresaSET nombre = Google, direccion = 1600 Amphitheatre Parkway, Mountain ViewWHERE id = 57[/SQL]Tambin podramos asignar una imagen por defecto a todas las empresas que no tengan logo, para ello haramos:

[SQL]UPDATE empresaSET imagen = logo-default.pngWHERE imagen IS NULL[/SQL]

Eliminar datos con SQLPara eliminar datos utilizaremosDELETE FROM, en esta sentencia indicamos sobre que tabla vamos a realizar la eliminacin adems de la condicin que se debe cumplir para realizar la eliminacin.

En nuestro ejemplo eliminaremos todas las empresas que tengan el campo del nombre vacio o nulo.

[SQL]DELETE FROM empresaWHERE nombre IS NULL OR nombre = [/SQL]

Consultar datos con SQLPara consultar datos (extraer datos) de una tabla se utilizaSELECTindicando los campos que deseamos extraer y el nombre de la tabla que utilizaremos.Para nuestra tabla de ejemplo si deseamos consultar todas nombres y direcciones de las empresas:

[SQL]SELECT nombre, direccion FROM empresa[/SQL]

Se pueden utilizar alias para los campos extrados, por ejemplo:

[SQL]SELECT nombre as Empresa, direccion as Direccin FROM empresa [/SQL]

Si deseamos extraer todos los campos podemos utilizar el caracter*.

[SQL]SELECT * FROM empresa[/SQL]

Filtrando los resultadosPodemos aplicar condiciones a nuestras consultas con la directivaWHERE.

Para extraer la empresa con identificador 57 la consulta sera:

[SQL]SELECT * FROM empresa WHERE id = 57[/SQL]

Si deseamos mostrar todas las empresas que tengan registradas su direccin:

[SQL]SELECT * FROM empresa WHERE direccion IS NOT NULL[/SQL]

Tambim podriamos consultar todas las empresas cuyo nombre empiece con la letra A.

[SQL]SELECT * FROM empresa WHERE nombre like A%[/SQL]

Ordenando los resultadosPara el ordenamiento de los resultados se utilizaORDER BY, este define por que campo se har el ordenamiento as como si ser en forma ascendente (ASC) o descendente (ASC).

Si utilizamos nuestra tabla de ejemplo podramos listar todas las empresas en orden alfabetico:

[SQL]SELECT * FROM empresa ORDER BY nombre ASC[/SQL]

Contando los resultadosEs posible contar los registros utilizandoCOUNT, esto unido al filtro de datos es til para hacer conteos de datos.Si deseamos conocer cuantas empresa registradas tenemos:

[SQL]SELECT COUNT(*) FROM empresa[/SQL]

Podramos conocer cuantas empresas tienen registradas direcciones vacas:

[SQL]SELECT COUNT(*) FROM empresa WHERE direccion = [/SQL]

Limitando los resultadosMySQL permite limitar la cantidad de resultados utilizando la palabra LIMIT, esta sentencia es muy flexible pues permite definir a partir de que registro y la cantidad de datos devueltos.

Si deseamos visualir las 5 ultimas empresas registradas en nuestra tabla tendramos:

[SQL]SELECT * FROM empresa ORDER BY id DESC LIMIT 5[/SQL]

Si estamos mostrando los resultados ordenados alfabeticamente en grupos de 10, tendramos:

[SQL]/* Para mostrar los primero 10 resultados */SELECT * FROM empresa ORDER BY nombre ASC LIMIT LIMIT 0, 10/* Para mostrar los siguientes 10 resultados */SELECT * FROM empresa ORDER BY nombre ASC LIMIT LIMIT 10, 10[/SQL]

Ahora ya podemos crear, editar, eliminar y consultar los datos utilizando condiciones con la posibilidad de filtrar, ordenar y limitar los resultados.

PHP con MySQL: Crear una conexin a MySQLLa conexin de PHP con MySQL es el primer paso para crear aplicaciones web. Al tener una conexin podremos insertar, editar y consultar registros de una Base de Datos lo cual nos permitir crear aplicaciones que permitan a los visitantes a consultar informacin de acuerdo a sus necesidades.

Crear una conexin con MySQLPara crear una conexin con MySQL hacemos uso de la funcinmysql_connecty luego definimos la base de datos que vamos a utilizar por medio de la funcinmysql_select_db.

PHP1. $conexion = mysql_connect("localhost", "usuario", "clave");2. mysql_select_db("demo", $conexion);En la primera lnea hemos creado la conexin a un servidor local y luego hemos seleccionado la base de datosdemola cual utilizaremos para consultar datos segn nuestras necesidades.

Explicando la Conexin

En el ejemplo hemos utilizado la funcinmysql_connect, el cual recibe tres parmetros.

CODE1. mysql_connect("server", "username", "password")

Donde se tienen: server: es la direccin IP o el nombre del servidor de base de datos. username: nombre usuario para acceder a MySQL. password: clave de acceso a MySQL.

Cerrando la ConexinUna vez creada la conexin y hecho las consultas necesarias a nuestra base de datos, es necesario cerrar esa conexin de esta forma liberamos recursos del servidor y mejoramos el rendimiento de nuestra aplicacin.

PHP1. mysql_close($conexion);

Para cerrar la conexin hemos utilizado la funcin mysql_close que recibe como parmetro el identificador de la conexin.

Recomendaciones Se recomienda hacer la conexin en un archivo externo, para poder utilizarlo en diferentes pginas. De esta forma si cambiamos de servidor solo editamos el archivo de conexin con los nuevos datos de conexin. Es recomendable cerrar siempre las conexiones, esto previene que la aplicacin tenga errores por exceso de conexiones.

PHP con MySQL: Insertar datos en MySQLContinuando con la serie de artculos dedicados a explicar como trabajar PHP con MySQL, ahora nos toca explicar como insertar datos o registros en nuestras tablas de MySQL.

RequerimientosPara guardar datos en MySQL es necesario primerocrear una conexin con MySQL, tambin necesitamos una base de datos de ejemplo el cual pueden crear con el siguientescript SQLy finalmenteconocimientos bsicos de SQL.

Conceptos Bsicos

PHP provee funciones nativas que permiten interactuar con MySQL, para el proceso de insertar registros utilizaremos las siguientes funciones. mysql_querypermite enviar cualquier consulta SQL (SELECT,INSERT,UPDATE, etc.) desde PHP. mysql_insert_iddevuelve el identificador del ltimo registro ingresado.

Entonces si deseamos insertar una nueva empresa en nuestra tabla de ejemplo tendramos:PHP1. // abrimos la conexin2. require("conexion.php");3. // insertarmos el registro4. mysql_query("INSERT INTO empresa (nombre, direccion) VALUES ('Apple', '1 Infinite Loop')");5. // mostramos el ID del registro6. echo mysql_insert_id();

Como pueden ver la creacin de datos es sencilla, solo necesitamos crear la consulta adecuada y la enviamos mediantemysql_query.

Ejemplo Prctico

Veamos un ejemplo prctico, donde mediante un formulario en HTML registraremos los datos de las empresas.

Creando el FormularioPara nuestro ejemplo creamos un formulario con tres campos (nombre, direccin y telfono) con dos botones uno para enviar los datos y otro para limpiar el formulario.

HTML41. 2. Nombre 3. Direccin
4. Telfono 5. Guardar6. Limpiar7.

Procesando los DatosEl siguiente paso, es verificar si se estn enviando datos desde un formulario para luego crear la consulta concatenando los datos enviados para finalmente guardar los datos con la funcinmysql_query.

PHP1. // file: insert-demo2.php2. require("conexion.php");3. $status = "";4. if (isset($_POST["nombre"])) {5. $nombre = $_POST["nombre"];6. $direccion = $_POST["direccion"];7. $telefono = $_POST["telefono"];8. // Creamos la consulta9. $sql = "INSERT INTO empresa (nombre, direccion, telefono) ";10. $sql.= "VALUES ('".$nombre."', '".$direccion."', '".$telefono."')";11. // enviamos la consulta12. mysql_query($sql, $conexion);13. $status = "ok";14. }

Uniendo el cdigo obtenemos nuestro primer ejemplo funcionando para agregar registros desde un formulario.

Filtrando los DatosEl ejemplo anterior, funciona pero tiene un problema y es que el usuario podra haber ingresado datos invlidos (Por ejemplo texto donde solo se aceptan nmeros) o tambin enviar cdigo SQL para atacar a nuestra base de datos. Por ello antes de utilizar los datos enviados por el usuario es necesario antes normalizar estos datos.

Creamos una funcin llamadasqlValue, esta se encarga de convertir al tipo de dato correcto y agregarle los apostrofes necesarios para los textos y fechas.

PHP1. // file: funciones.php2. function sqlValue($value, $type) {3. $value = get_magic_quotes_gpc() ? stripslashes($value) : $value;4. $value = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($value) : mysql_escape_string($value);5. switch ($type) {6. case "text":7. $value = ($value != "") ? "'" . $value . "'" : "NULL";8. break;9. case "int":10. $value = ($value != "") ? intval($value) : "NULL";11. break;12. case "double":13. $value = ($value != "") ? "'" . doubleval($value) . "'" : "NULL";14. break;15. case "date":16. $value = ($value != "") ? "'" . $value . "'" : "NULL";17. break;18. }19. return $value;20. }

Esta funcin recibe dos parmetros, el primero el dato que deseamos normalizar y el segundo el tipo de dato (text,int,double,date). Luego vamos a modificar nuestro primer script para verificar los datos antes de guardarlos.

PHP1. // file: insert-demo3.php2. require("conexion.php");3. require("funciones.php");4. $status = "";5. if (isset($_POST["nombre"])) {6. $nombre = sqlValue($_POST["nombre"], "text");7. $direccion = sqlValue($_POST["direccion"], "text");8. $telefono = sqlValue($_POST["telefono"], "int");9. 10. $sql = "INSERT INTO empresa (nombre, direccion, telefono) ";11. $sql.= "VALUES (".$nombre.", ".$direccion.", ".$telefono.")";12. 13. mysql_query($sql, $conexion);14. $status = "ok";15. }

Unimos nuevamente el cdigo y obtenemos una nueva forma de guardar datos en MySQL esta vez verificando los tipos de datos antes de guardarlos.Haciendo pequeas modificaciones podramos guardar los datos de cualquier formulario, no importa la cantidad de datos o la complejidad de los mismos, todo este proceso se puede resumir en armar correctamente la consulta SQL para insertar los datos.

Depurar los INSERTSSi tienen problemas en la creacin de sus consultas por que no insertan o generan un error, lo mas sencillo es imprimir la consulta antes de enviarla a MySQL y detener la ejecucin del script PHP.

PHP1. $sql = "INSERT INTO empresa (nombre, direccion, telefono) ";2. $sql.= "VALUES (".$nombre.", ".$direccion.", ".$telefono.")";3. echo $sql;4. exit;5. mysql_query($sql, $conexion);

La consulta devuelta podemos revisarla y detectar algn error de sintaxis, tambin podramos ejecutarla directamente en algn cliente de MySQL que tengamos para verificar si hace la insercin correctamente.

Nota FinalPara mejorar an mas nuestro script para insertar datos, podramos agregar validacin de formularios. Ello lo podramos hacer desde el lado del cliente mediante una librera javascript para validar formulario (Por ejemplo:Validar Formularios con Mootoolso tambinVanadium: Validar formularios fcilmente). La segunda forma es hacerlo con PHP verificando que los datos no estn vacos, asignando valores por defecto si es que el campo esta vaco, entre otras verificaciones.PHP con MySQL: Consultar datos en MySQL

Consultar o extraer datos es una de las tareas mas comunes al interactuar con bases de datos, de esta forma podemos extraer los datos previamente almacenados, por ejemplo para mostrar la lista de productos de una tienda online o tambin para un buscador de documentos o el login de usuarios.

RequerimientosAntes de continuar, es necesario tener una conexin abierta a MySQL, para ello pueden leerCrear una conexin a MySQLy luego crear la base de datos de ejemplo con el siguienteScript SQL.

Extrayendo datos de MySQLPara extraer datos utilizaremos la funcinmysql_querymediante la cual enviamos un consulta SQL. Entonce primero incluimos el archivo para crear la conexin e inmediatamente creamos la consulta para extraer todos los datos de las empresas en nuestra base de datos.

PHP1. // incluimos la conexin2. require("conexion.php");3. // creamos la consulta4. $query = "SELECT * FROM empresa ORDER BY nombre ASC";5. // enviamos la consulta a MySQL6. $queEmp = mysql_query($query, $conexion);

Tambin se puede agregar una sentencia para mostrar si hay algn error en la conexin o consulta.

PHP1. require("conexion.php");2. $query = "SELECT * FROM empresa ORDER BY nombre ASC";3. $queEmp = mysql_query($query, $conexion) or die(mysql_error());

Mostrando los DatosEl siguiente paso es mostrar los datos extrados en la consulta, para ello podemos utilizarmysql_fetch_assocel cual devolver un array asociativo con el siguiente registro devuelto por la consulta. Entonces para mostrar todos los registros devueltos por la consulta se tendra:

PHP1. while ($resEmp = mysql_fetch_assoc($queEmp)) {2. echo $resEmp['nombre']."
";3. }

Donde se puede ver que para acceder a cada campo del registro lo hacemos como un array donde le pasamos el nombre del campo que deseamos acceder (En el ejemplo estamos mostrando todos los nombres de las empresas consultadas).

Ahora, solo depende como deseamos mostrar los datos para modificar nuestro script. Por ejemplo si deseamos mostrar los datos como una lista tendramos

PHP1.

  • 2. 3.
  • 4. 5.

Ahora tambin podramos mostrar los resultados en una tabla o datagrid, para ello modificamos nuestro cdigo donde utilizaremos una tabla para mostrar en varias columnas los datos consultados.

PHP1. 2. 3. Nombre4. Direccin5. Telfono6. 7. 8. 9. 10. 11. 12. 13. 14.

Crear un BuscadorAhora, podramos crear un buscador bsico de empresas, para ello creamos un formulario para ingresar el criterio de bsqueda.

PHP1. 2. 3. 4.

Antes de continuar decidimos el tipo de consulta SQL que vamos a utilizar, en nuestro caso la bsqueda ser por las primeras letras del nombre, para ello utilizaremos la sentencia LIKE explicada en el artculoPHP con MySQL: Introduccin a SQL.

SQL1. SELECT*FROMempresaWHEREnombreLIKE'A%'

Luego, una vez enviado el formulario procedemos a recuperar los datos para proceder a crear la consulta y enviarla a MySQL. Primero verificamos que se ha enviado un criterio de bsqueda luego creamos la consulta no sin antes normalizar los datos (para prevenir ataques de inyeccin SQL), esto lo hacemos con la funcin sqlValue que hemos creado enPHP con MySQL: Insertar datos en MySQL.

PHP1. require("conexion.php");2. require("funciones.php");3. 4. $criterio = getParam($_GET["criterio"], "");5. $total = 0;6. if ($criterio != "") {7. $slike = sqlValue($criterio."%", "text");8. $query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC";9. $queEmp = mysql_query($query, $conexion);10. $total = mysql_num_rows($queEmp);11. }

Ntese que estamos utilizando una variable$totaldonde se almacena el total de resultados devueltos por la consulta. El total de resultados se obtiene con la funcinmysql_num_rows.

Finalmente mostramos los resultados al cliente, para ello verificamos que existan resultados en la consulta. Uniendo todos los elementos tendramos:

PHP1. 14. 15. 16. Consultar datos en MySQL17. 18. 19. Buscador de Empresas20. 21. 22. 23. 24. 25. Total de Resultados:26. 27. 28. Nombre29. Direccin30. Telfono31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.

Como pueden ver no es complicado hacer consultas a MySQL, solo debemos crear la cadena con la consulta SQL y luego enviarla utilizando la funcinmysql_query. Lo siguiente solo depende de como deseamos mostrar la informacin resultante de nuestra consulta.

Para finalizar les dejo los archivos fuente de los ejemplos desarrollados en este artculo para que puedan hacer sus pruebas, seguir experimentando y completar su aprendizaje.PHP con MySQL: Editar Registros con MySQLContinuando con la serie de artculos para trabajar con datos de MySQL desde PHP, es el momento de editar los datos guardados en nuestras tablas. Para ello haremos uso de la sentencia UPDATE explicada anteriormente enPHP con MySQL: Introduccin a SQL.

El proceso ser: primero mostrar un formulario con los datos que tenemos guardados, luego el usuario puede modificar los datos y enviar el formulario. Continuando, recibimos los datos enviados desde el formulario, con ello creamos la consulta SQL y lo enviamos a MySQL con la funcinmysql_query.

Preparar el listado de datosPara nuestro ejemplo seguiremos utilizando la base de datos de ejemplo (Pueden descargar elScript SQL). Entonces haremos un listado de todos los registros de la tablaempresay para cada registro crearemos un enlace hacia otra pgina donde se har la edicin de datos.

HTML41. 9. 10. 11. Listado de Empresas12. 13. 14. 15. 16. 17. 18. 19.