Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PHP MySQL Manual - Corto
PHP MySQL Manual - Corto
1. Instalando MySQL
Instalar MySQL en su versin para Windows, e ir haciendo pruebas antes de subir nuestras pginas, es bastante sencillo.
En la seccin Programas podeis encontrarlo para bajarlo.
Simplemente haced doble click en el programa de instalacin, responded a las tpicas preguntas de dnde lo quieres
instalar, etc., y ya est.
Ahora hay que ponerlo en marcha. Para ello, siempre debe estar ejecutndose (estar en segundo plano) el programa
mysqld.exe, situado en el subdirectorio bin del directorio en el que se haya instalado el programa. Con este programa en
marcha, ejecutaremos mysql.exe para ver cmo entrar sentencias SQL, o directamente podremos probar scripts PHP que
conecten con el servidor MySQL.
Como PHP lleva soporte interno para MySQL, nicamente hemos de acordarnos de tener en memoria el programa
mysqld.exe, el resto lo hace l solo, como iremos viendo en los siguientes captulos.
Y ahora que hemos creado la tabla, vamos a borrarla (ms que nada porque estamos practicando y hay que ver de todo,
no porque sea la costumbre usual ;-) ). Para ello, haremos:
mysql> DROP TABLE USUARIOS;
Query OK, 0 rows affected (0.11 sec)
mysql> _
Llevad cuidado cuando borreis una tabla, pues no quedar ni rastro de ella, as que luego no podreis recuperar los datos
que hubiera. Hay que estar muy seguro de que se quiere borrar una tabla para hacerlo.
Y, puestos a borrar, vamos a borrar la base de datos (repito, esto no es lo usual cuando uno trabaja con ellas ;-) ), para lo
que haremos:
mysql> DROP DATABASE Prueba;
Query OK, 0 rows affected (0.11 sec)
mysql> _
Hemos borrado la base de datos entre otras cosas porque era un ejemplo y tampoco era demasiado til O;-)
Vamos a salir del programa, ejecutando exit.
Ya sabemos crear la base de datos, elegirla de entre unas cuantas, crear tablas... insertar registros tampoco ser nada
complicado, sin embargo, estara bien poder pensar cmo ser la base de datos, escribir en algn fichero los comandos a
ejecutar, y pasar ese script a MySQL, incluso, con algunas inserciones de registros, si es necesario. Bien, pues de eso es
de lo que vamos a ver ahora un ejemplo.
Con cualquier editor de texto, nos creamos un fichero como este (yo lo he llamado ScriptEjemplo.sql):
CREATE DATABASE REGISTRO;
USE REGISTRO;
CREATE TABLE USUARIOS(
USUARIO VARCHAR(30) NOT NULL,
EMAIL VARCHAR(50) NOT NULL,
NOMBRE VARCHAR(20) NOT NULL,
APELLIDOS VARCHAR(40) NOT NULL,
ICONO INTEGER,
PRIMARY KEY(USUARIO) );
La extensin no es importante, simplemente ser para recordarnos que ese archivo contiene comandos SQL, pero a
MySQL le dar igual que pongas esa, otra o ninguna extensin. Lo que le importar es que el fichero exista, y que
contenga comandos escritos correctamente y en el orden correcto (por ejemplo, no se puede crear una tabla antes de
elegir la base de datos).
Lo grabamos donde queramos, y luego ejecutamos:
mysql < UNIDAD:\RUTA\ScriptEjemplo.sql
Si todo ha ido bien, MySQL habr hecho todo lo que estuviera escrito en el fichero. Si algo ha fallado, dir qu error ha
sucedido. Con la base de datos del ejemplo del script, volvemos a entrar en MySQL. Escribimos USE Registro; para
seleccionar esa base de datos, y vamos a insertar un registro, tal que este (por ejemplo):
mysql> INSERT INTO USUARIOS(USUARIO,EMAIL,NOMBRE,APELLIDOS,ICONO)
-> VALUES(
-> 'MADDY',
-> 'MADDY@MADDY.COM',
-> 'MADDY',
-> 'MADDY',
-> 1);
Query OK, 1 row affected (0.33 sec)
mysql> _
Si queremos realizar ahora una consulta, ser tan sencillo como escribir lo siguiente:
mysql> SELECT USUARIO FROM USUARIOS;
+---------+
| USUARIO |
+---------+
| MADDY
|
+---------+
1 row in set (0.55 sec)
mysql> _
Por ltimo, vamos a ver una accin que nos resultar til cuando no nos acordemos de cmo estaba definida una tabla,
qu campos tena, de qu tipo, etc., se trata de SHOW COLUMNS FROM tabla. Lgicamente, para ello debemos tener
seleccionada una base de datos ;-)
mysql> SHOW COLUMNS FROM USUARIOS;
+-----------+-------------+------+-----+---------+-------+---------------------------------+
| Field
| Type
| Null | Key | Default | Extra | Privileges
|
+-----------+-------------+------+-----+---------+-------+---------------------------------+
| USUARIO
| varchar(30) |
| PRI |
|
| select,insert,update,references |
| EMAIL
| varchar(50) |
|
|
|
| select,insert,update,references |
| NOMBRE
| varchar(20) |
|
|
|
| select,insert,update,references |
| APELLIDOS | varchar(40) |
|
|
|
| select,insert,update,references |
| ICONO
| int(11)
| YES |
| NULL
|
| select,insert,update,references |
+-----------+-------------+------+-----+---------+-------+---------------------------------+
5 rows in set (0.60 sec)
Y aqu tenemos la informacin que queramos :-)
donde $NombreBD e $IdConexion son las variables que tenamos definidas antes, una con el nombre de la base de datos
y otra con el identificador de la conexin.
Dejamos el captulo en este punto, y en el siguiente ya comenzamos a ver funciones para acceder a los datos de la base
de datos. Entre otras cosas, se explicar la funcin mysql_query();, que ha aparecido por aqu "por arte de magia" ;-)
4. Consultas
Comenzaremos este captulo con un script de ejemplo, llamado PruebaBD.phtml:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE> Prueba PHP y MySQL </TITLE>
</HEAD>
<BODY BGCOLOR=white>
<?php
$NombreBD = "Registro";
$Servidor = "localhost";
$Usuario = "root";
$IdConexion = mysql_connect($Servidor, $Usuario);
print("Se acaba de establecer la conexin.<BR>");
print("Servidor: ".$Servidor."<P>");
mysql_select_db($NombreBD, $IdConexion);
$Query = 'SELECT USUARIO,EMAIL FROM USUARIOS';
$IdConsulta = mysql_query($Query, $IdConexion);
$ResultQuery = mysql_fetch_array($IdConsulta);
print("Usuario: ".$ResultQuery["USUARIO"]."<B>");
print("E-mail: ".$ResultQuery[1]."<P>");
?>
Fin de la conexin a BD.
</BODY>
</HTML>
En este ejemplo, cuya ejecucin podemos observar en la siguiente imagen, se ven varios elementos ya estudiados en el
captulo anterior, y uno nuevo, que es el que trataremos extensamente en este captulo.
Al igual que tenemos mysql_fetch_array();, hay una funcin que se llama mysql_fetch_row();. Hace lo mismo, pero
con una salvedad, y es que no se puede usar el nombre del campo en el array que devuelve como si fuera una manera de
indexar. Es decir, slo admite referencias numricas a los campos de la consulta. Hay que tener en cuenta que el primero
es el 0.
Otras funciones que pueden sernos tiles son:
mysql_field_name(int IdConsulta, int IndiceCampo);
Nos devuelve el tipo de dato correspondiente a un campo de la base de datos, perteneciente a la consulta
IdConsulta y cuya posicin en el SELECT viene dada por IndiceCampo, siendo 0 la primera posicin. Probad a
poner, como muestra, este cdigo en el ejemplo:
$TipoDato = mysql_field_type($IdConsulta, 1);
print("Tipo de dato del campo: ".$TipoDato."<P>");
mysql_field_name(int IdConsulta, int IdCampo);
Esta funcin nos devuelve el nombre del campo que ocupa la posicin IdCampo referente a la consulta
IdConsulta. Una vez ms, hay que decir que los campos se numeran de 0 a N-1, siendo N el nmero de campos
de la consulta. Podemos incluir este fragmento de cdigo en el ejemplo anterior:
$NombreDato = mysql_field_name($IdConsulta,0);
print("Nombre del campo: ".$NombreDato."<P>");
Nos queda por ver una funcin, mysql_result();. Esta funcin tiene la siguiente definicin:
mysql_result(int IdConsulta, int Fila, int Campo);
Esta funcin nos devuelve el dato referido a la consulta IdConsulta que ocupa la posicin (Fila, Campo). Por ejemplo,
si aadimos este cdigo al que tenamos:
$Dato1 = mysql_result($IdConsulta, 0, 0);
print("El valor obtenido en la posicin (0,0) ".
"es: <B>".$Dato1."</B><P>");
Insertar, borrar y actualizar registros es igualmente sencillo. Simplemente, tenemos que almacenar nuestra consulta en
una variable, y pasrsela como argumento a la funcin mysql_query();. Terminamos el captulo viendo un ejemplo en el
que insertamos un nuevo registro y luego mostramos cuntos hay:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE> Prueba PHP y MySQL </TITLE>
</HEAD>
<BODY BGCOLOR=white>
<?php
$NombreBD = "Registro";
$Servidor = "localhost";
$Usuario = "root";
$IdConexion = mysql_connect($Servidor, $Usuario);
print("Se acaba de establecer la conexin.<BR>");
print("Servidor: ".$Servidor."<P>");
mysql_select_db($NombreBD, $IdConexion);
$Query = 'INSERT INTO USUARIOS '.
'(USUARIO,EMAIL) '.
'VALUES ('.
'"LOLITA","EMILIO@PUNTO.COM");';
$IdInsercion = mysql_query($Query, $IdConexion);
$Query = 'SELECT USUARIO,EMAIL FROM USUARIOS;';
$IdConsulta = mysql_query($Query, $IdConexion);
$NFilas = mysql_num_rows($IdConsulta);
for($i=0;$i<$NFilas;$i++) {
print("Fila ".$i."<BR>");
$ResultQuery = mysql_fetch_array($IdConsulta);
print("Usuario: ".$ResultQuery["USUARIO"]."<BR>");
print("E-mail: ".$ResultQuery[1]."<P>");
}
?>
Fin de la conexin a BD.
</BODY>
</HTML>
Podemos ver el resultado en la imagen:
5. Un ejemplo final
Para hacernos una idea de cmo trabajar, vamos a desarrollar en este captulo un ejemplo cuya finalidad ser, dada una
base de datos con una nica tabla, insertar en ella comentarios. Es un ejemplo sencillo que, convenientemente
modificado, puede dar lugar a aplicaciones como un libro de visitas, o ampliar sus posibilidades para hacer un sistema de
comentarios en la web, etc.
Partimos del siguiente cdigo, que nos crear un formulario en la pgina (obviaremos las directivas de la cabecera y nos
centramos directamente en <BODY>):
<FORM ACTION="Comentarios.phtml" METHOD="POST" NAME="Comentario">
<CENTER>
<H2>Comentarios</H2>
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2>
<TR> <TD>Nombre: </TD>
<TD><INPUT TYPE=TEXT SIZE=20 NAME="Nombre"></TD></TR>
<TR> <TD>Email: </TD>
<TD><INPUT TYPE=TEXT SIZE=20 NAME="Email"></TD></TR>
<TR> <TD COLSPAN=2>Escribe tu comentario: <BR>
<TEXTAREA ROWS=5 COLS=30 NAME="TComentario"></TEXTAREA></TD></TR>
</TABLE>
<INPUT TYPE=SUBMIT VALUE="Enviar">
<INPUT TYPE=RESET VALUE="Borrar">
</CENTER>
</FORM>
Podemos afinar ms, y en lugar de un elemento SUBMIT poner simplemente uno de tipo BUTTON que en su evento
onClick tenga asociado un cdigo de validacin de datos, para no permitir campos vacos, o una direccin de correo sin
arrobas, etc., para lo que habra que hacer el correspondiente script JavaScript. Pero eso es una ampliacin y queda como
ejercicio al lector.
La idea va a ser, con los datos del formulario, rellenar los campos de una tabla en una base de datos que ha sido creada
invocando a MySQL pasndole este script:
CREATE DATABASE COMENTARIOS;
USE COMENTARIOS;
CREATE TABLE COMENTARIOS(
IDCOMENTARIO INTEGER NOT NULL AUTO_INCREMENT,
NOMBRE VARCHAR(40) NOT NULL,
EMAIL VARCHAR(40) NOT NULL,
MENSAJE TEXT NOT NULL,
PRIMARY KEY(IDCOMENTARIO) );
Antes de seguir, una aclaracin: el campo IDCOMENTARIO es un entero de tipo AUTO_INCREMENT, esto quiere decir que no
necesitaremos incrementar manualmente su valor, sino que cuando insertemos un registro, este valor se generar de
forma automtica.
Parece claro, pues, que el contenido del campo Nombre del formulario se insertar en la columna NOMBRE, el del campo
Email en la columna EMAIL y el campo TComentario en la columna MENSAJE. Estos datos son pasados al script PHP
llamado Comentarios.phtml va el mtodo POST, muy adecuado para este tipo de aplicaciones, ya que, al haber un
elemento TEXTAREA, es muy fcil sobrepasar la limitacin de 1 KB de informacin que permite GET. Como sabemos, los
nombres para las variables escogidos en el formulario sern los nombres de variables PHP que tendremos que usar en el
script que procesa los datos, pues ser ah donde tendremos sus valores.
La idea del script ser esta: insertar los datos que nos acaban de introducir en el formulario en la base de datos, y
mostrar todos los datos que hubiera hasta el momento, dndole algo de formato. As, el cdigo queda:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE> Ejemplo MySQL </TITLE>
</HEAD>
<BODY BGCOLOR=white>
<?php
$NombreBD = "Comentarios";
$Servidor = "localhost";
$Usuario = "root";
$IdConexion = mysql_connect($Servidor, $Usuario);
mysql_select_db($NombreBD, $IdConexion);
$Query = 'INSERT INTO COMENTARIOS'.
' (NOMBRE,EMAIL,MENSAJE)'.
' VALUES ('.
'"'.$Nombre.'","'.$Email.'","'.$TComentario.'");';
$IdInsercion = mysql_query($Query, $IdConexion);
?>
Mensajes insertados hasta ahora: <P>
<?php
$Query = 'SELECT NOMBRE,EMAIL,MENSAJE FROM COMENTARIOS;';
$IdConsulta = mysql_query($Query, $IdConexion);
$NFilas = mysql_num_rows($IdConsulta);
?>
<CENTER>
<TABLE BORDER=0 BGCOLOR=#7BA9E8 CELLPADDING=4 CELLSPACING=3>
<?
for($i=0;$i<$NFilas;$i++) {
$ResultQuery = mysql_fetch_array($IdConsulta);
print("<TR>");
print("<TD>Nombre: ".$ResultQuery["NOMBRE"]."</TD>");
print("<TD>E-mail: ".$ResultQuery["EMAIL"]."</TD></TR>");
print("<TR><TD BGCOLOR=#ACC1FB COLSPAN=2>");
print("Mensaje: ".$ResultQuery["MENSAJE"]."</TD>");
print("</TR>");
}
?>
</TABLE>
</CENTER>
</BODY>
</HTML>
Con todo lo visto, no queda mucho ms por comentar aqu, ya que no se ha hecho nada nuevo con respecto a captulos
anteriores. Un ejemplo, tras varias inserciones de prueba, de este script, podemos verlo en la imagen: