portafolio
1. INTRODUCCION
El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft Jet. SQL se utiliza para crear objetos QueryDef, como el argumento de origen del método OpenRecordSet y como la propiedad RecordSource del control de datos. También se puede utilizar con el método Execute para crear y manipular directamente las bases de datos Jet y crear consultas SQL de paso a través para manipular bases de datos remotas cliente - servidor.
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.
Existen dos tipos de comandos SQL:
los DLL que permiten crear y definir nuevas bases de datos, campos e índices.los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.
LENGUAJE DE DEFINICIÓN DE DATOS
Un lenguaje de base de datos o lenguaje de definición de datos (Data Definition Language, DDL por sus siglas en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los programadores de la misma llevar a cabo las tareas de definición de las estructuras que almacenarán los datos así como de los procedimientos o funciones que permitan consultarlos.
Un Data Definition Language o Lenguaje de descripción de datos ( DDL ) es un lenguaje de programación para definir estructura de datos . El término DDL fue introducido por primera vez en relación con el modelo de base de datos CODASYL, donde el esquema de la base de datos ha sido escrito en un lenguaje de descripción de datos que describe los registros, los campos, y "conjuntos" que conforman el usuario modelo de datos. Más tarde fue usado para referirse a un subconjunto de SQL, pero ahora se utiliza en un sentido genérico para referirse a cualquier lenguaje formal para describir datos o estructuras de información, como los esquemas XML.
CREATE DATABASE
Como vemos la instrucción mínima es: CREATE DATABASE nbBasedeDatos nbBasedeDatos: Es el nombre de la nueva base de datos. Los nombres de base de datos deben ser únicos en una instancia de SQL Server y cumplir las reglas de los identificadores. Puede tener 128 caracteres como máximo, excepto en un caso que veremos más adelante. CREATE DATABASE crea una base de datos con el nombre dado. Para usar CREATE DATABASE , necesita el permiso CREATE en la base de datos.
|
.BAK | .DAT | .HSH | |
.MRG | .MYD | .ISD | |
.MYI | .db | .frm |
00
-ff
. Son subdirectorios usados por tablas RAID
. db.opt
, si existe.DROP DATABASE
de nuevo.SQL Server ALTER TABLE ALTER COLUMN
Resumen : en este tutorial, aprenderá a usar la instrucción SQL Server
ALTER TABLE ALTER COLUMN
para modificar una columna de una tabla.SQL Server le permite realizar los siguientes cambios en una columna existente de una tabla:
- Modificar el tipo de datos
- Cambiar el tamaño
- Agregar una
NOT NULL
restricción
MODIFICAR EL TIPO DE DATOS DE LA COLUMNA
Para modificar el tipo de datos de una columna, use la siguiente instrucción:
El nuevo tipo de datos debe ser compatible con el anterior, de lo contrario, obtendrá un error de conversión en caso de que la columna tenga datos y no se pueda convertir.
Ver el siguiente ejemplo.
Primero, cree una nueva tabla con una columna cuyo tipo de datos sea
INT
:Segundo, inserte algunas filas en la tabla:
En segundo lugar, modifique el tipo de datos de la columna de
INT
a VARCHAR
:Tercero, inserte una nueva fila con una cadena de caracteres:
Cuarto, modifique el tipo de datos de la columna de
VARCHAR
nuevo a INT
:SQL Server emitió el siguiente error:
CAMBIAR EL TAMAÑO DE UNA COLUMNA
La siguiente instrucción crea una nueva tabla con una columna cuyo tipo de datos es
VARCHAR(10)
:Insertemos algunos datos de muestra en la tabla t2:
Puede aumentar el tamaño de la columna de la siguiente manera:
Sin embargo, cuando disminuye el tamaño de la columna, SQL Server comprueba los datos existentes para ver si puede convertir los datos en función del nuevo tamaño. Si la conversión falla, SQL Server termina la declaración y emite un mensaje de error.
LENGUAJE DE MANIPULACIÓN DE DATOS
Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un lenguaje proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Bases de Datos del Sistema Gestor de Bases de Datos. 1
El lenguaje de manipulación de datos más popular hoy en día es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras.
Comando | Descripción |
CREATE | Utilizado para crear nuevas tablas, campos e índices |
DROP | Empleado para eliminar tablas e índices |
ALTER | Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos. |
Comando | Descripción |
SELECT | Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado |
INSERT | Utilizado para cargar lotes de datos en la base de datos en una única operación. |
UPDATE | Utilizado para modificar los valores de los campos y registros especificados |
DELETE | Utilizado para eliminar registros de una tabla de una base de datos |
Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular.
Cláusula | Descripción |
FROM | Utilizada para especificar la tabla de la cual se van a seleccionar los registros |
WHERE | Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar |
GROUP BY | Utilizada para separar los registros seleccionados en grupos específicos |
HAVING | Utilizada para expresar la condición que debe satisfacer cada grupo |
ORDER BY | Utilizada para ordenar los registros seleccionados de acuerdo con un orden específico |
Formulación de Consultas con SQL
Las tres cláusulas y las preguntas de construcción en una consulta cláusulas de consulta en SQL y que relación guardan con las preguntas de construcción:
- Cláusula SELECT: Donde indicamos los campos de la tabla que queremos obtener, separados por comas. Responde a la pregunta: ¿Qué datos nos piden?
- Cláusula FROM: Donde indicamos en que tabla se encuentran estos campos. Responde a la pregunta: ¿Dónde están los datos?
- Cláusula WHERE: Donde establecemos la condición que han de cumplir los registros de la tabla que serán seleccionados. Responde a la pregunta: ¿Qué requisitos deben cumplir lo registros? Es de hecho donde se establece el filtro de registros, es decir, que registros serán considerados para mostrar sus datos y cuales no.
Union
El propósito del comando SQL UNION es combinar los resultados de dos consultas juntas. En este sentido, UNION es parecido a Join, ya que los dos se utilizan para información relacionada en múltiples tablas. Una restricción de UNION es que todas las columnas correspondientes necesitan ser del mismo tipo de datos.
zerofill en una columna de una tabla. |
Cualquier campo numérico puede tener otro atributo extra "zerofill".
"zerofill" rellena con ceros los espacios disponibles a la izquierda.
Por ejemplo, creamos la tabla "libros", definiendo los campos "codigo" y "cantidad" con el atributo "zerofill":
create table libros(
codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);
Note que especificamos el tamaño del tipo "int" entre paréntesis para que muestre por la izquierda ceros, cuando los valores son inferiores al indicado; dicho parámetro no restringe el rango de valores que se pueden almacenar ni el número de digitos.
Al ingresar un valor de código con menos cifras que las especificadas (6), aparecerán ceros a la izquierda rellenando los espacios; por ejemplo, si ingresamos "33", aparecerá "000033". Al ingresar un valor para el campo "cantidad", sucederá lo mismo.
Si especificamos "zerofill" a un campo numérico, se coloca automáticamente el atributo "unsigned".
Cualquier valor negativo ingresado en un campo definido "zerofill" es un valor inválido.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists libros;
create table libros(
codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Planeta',34.5,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',45.7,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',23,40);
select * from libros;
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values('545','El aleph', 'Borges', 'Emece',33,20);
select * from libros;
-- genera un error en versiones nuevas de MySQL 5.8 ya que no permite valores negativos con zerofill
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(-400,'Matematica estas ahi', 'Paenza', 'Paidos',15.2,-100);
select * from libros;
Columnas calculadas.
Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no un campo de una tabla.
Si queremos ver los títulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad
from libros;
Si queremos saber el monto total en dinero de un título podemos multiplicar el precio por la cantidad por cada título, pero también podemos hacer que MySQL realice el cálculo y lo incluya en una columna extra en la salida:
select titulo, precio,cantidad,precio*cantidad
from libros;
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia los siguientes cálculos:
select titulo, precio,precio*0.1,precio-(precio*0.1)
from libros;
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL donde generamos columnas calculadas en los comandos select:
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,500);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,300);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,50);
select titulo, precio,cantidad,precio*cantidad
from libros;
select titulo, precio,precio*0.1,precio-(precio*0.1)
from libros;
·
25 - Funciones para el manejo de cadenas. |
RECUERDE que NO debe haber espacios entre un nombre de función y los paréntesis porque MySQL puede confundir una llamada a una función con una referencia a una tabla o campo que tenga el mismo nombre de una función.
MySQL tiene algunas funciones para trabajar con cadenas de caracteres. Estas son algunas:
-ord(caracter): Retorna el código ASCII para el caracter enviado como argumento. Ejemplo:
select ord('A');
retorna 65.
-char(x,..): retorna una cadena con los caracteres en código ASCII de los enteros enviados como argumentos. Ejemplo:
select char(65,66,67);
retorna "ABC".
-concat(cadena1,cadena2,...): devuelve la cadena resultado de concatenar los argumentos. Ejemplo:
select concat('Hola,',' ','como esta?');
retorna "Hola, como esta?".
-concat_ws(separador,cadena1,cadena2,...): "ws" son las iniciales de "with separator". El primer argumento especifica el separador que utiliza para los demás argumentos; el separador se agrega entre las cadenas a concatenar. Ejemplo:
select concat_ws('-','Juan','Pedro','Luis');
retorna "Juan-Pedro-Luis".
-find_in_set(cadena,lista de cadenas): devuelve un valor entre de 0 a n (correspondiente a la posición), si la cadena envidada como primer argumento está presente en la lista de cadenas enviadas como segundo argumento. La lista de cadenas enviada como segundo argumento es una cadena formada por subcadenas separadas por comas. Devuelve 0 si no encuentra "cadena" en la "lista de cadenas". Ejemplo:
select find_in_set('hola','como esta,hola,buen dia');
retorna 2, porque la cadena "hola" se encuentra en la lista de cadenas, en la posición 2.
-length(cadena): retorna la longitud de la cadena enviada como argumento. Ejemplo:
select length('Hola');
devuelve 4.
- locate(subcadena,cadena): retorna la posición de la primera ocurrencia de la subcadena en la cadena enviadas como argumentos. Devuelve "0" si la subcadena no se encuentra en la cadena. Ejemplo:
select locale('o','como le va');
retorna 2.
- position(subcadena in cadena): funciona como "locate()". Devuelve "0" si la subcadena no se encuentra en la cadena. Ejemplo:
select position('o' in 'como le va');
retorna 2.
- locate(subcadena,cadena,posicioninicial): retorna la posición de la primera ocurrencia de la subcadena enviada como primer argumentos en la cadena enviada como segundo argumento, empezando en la posición enviada como tercer argumento. Devuelve "0" si la subcadena no se encuentra en la cadena. Ejemplos:
select locate('ar','Margarita',1);
retorna 1.
select locate('ar','Margarita',3);
retorna 5.
- instr(cadena,subcadena): retorna la posición de la primera ocurrencia de la subcadena enviada como segundo argumento en la cadena enviada como primer argumento. Ejemplo:
select instr('como le va','om');
devuelve 2.
- lpad(cadena,longitud,cadenarelleno): retorna la cadena enviada como primer argumento, rellenada por la izquierda con la cadena enviada como tercer argumento hasta que la cadena retornada tenga la longitud especificada como segundo argumento. Si la cadena es más larga, la corta. Ejemplo:
select lpad('hola',10,'0');
retorna "000000hola".
- rpad(cadena,longitud,cadenarelleno): igual que "lpad" excepto que rellena por la derecha.
- left(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando desde la inquierda, primer caracter. Ejemplo:
select left('buenos dias',8);
retorna "buenos d".
- right(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando desde la derecha, último caracter. Ejemplo:
select right('buenos dias',8);
retorna "nos dias".
- substring(cadena,posicion,longitud): retorna una subcadena de tantos caracteres de longitud como especifica en tercer argumento, de la cadena enviada como primer argumento, empezando desde la posición especificada en el segundo argumento. Ejemplo:
select substring('Buenas tardes',3,5);
retorna "enas".
- substring(cadena from posicion for longitud): variante de "substring(cadena,posicion,longitud)". Ejemplo:
select substring('Buenas tardes' from 3 for 5);
- mid(cadena,posicion,longitud): igual que "substring(cadena,posicion,longitud)". Ejemplo:
select mid('Buenas tardes' from 3 for 5);
retorna "enas".
- substring(cadena,posicion): retorna la subcadena de la cadena enviada como argumento, empezando desde la posición indicada por el segundo argumento. Ejemplo:
select substring('Margarita',4);
retorna "garita".
-substring(cadena from posicion): variante de "substring(cadena,posicion)". Ejemplo:
select substring('Margarita' from 4);
retorna "garita".
-substring_index(cadena,delimitador,ocurrencia): retorna la subcadena de la cadena enviada como argumento antes o después de la "ocurrencia" de la cadena enviada como delimitador. Si "ocurrencia" es positiva, retorna la subcadena anterior al delimitador (comienza desde la izquierda); si "ocurrencia" es negativa, retorna la subcadena posterior al delimitador (comienza desde la derecha). Ejemplo:
select substring_index( 'margarita','ar',2);
retorna "marg", todo lo anterior a la segunda ocurrencia de "ar".
select substring_index( 'margarita','ar',-2);
retorna "garita", todo lo posterior a la segunda ocurrencia de "ar".
-ltrim(cadena): retorna la cadena con los espacios de la izquierda eliminados. Ejemplo:
select ltrim(' Hola ');
retorna
"Hola "
.
- rtrim(cadena): retorna la cadena con los espacios de la derecha eliminados. Ejemplo:
select rtrim(' Hola ');
retorna
" Hola"
.
-trim([[both|leading|trailing] [subcadena] from] cadena): retorna una cadena igual a la enviada pero eliminando la subcadena prefijo y/o sufijo. Si no se indica ningún especificador (both, leading o trailing) se asume "both" (ambos). Si no se especifica prefijos o sufijos elimina los espacios. Ejemplos:
select trim(' Hola ');
retorna 'Hola'.
select trim (leading '0' from '00hola00');
retorna "hola00".
select trim (trailing '0' from '00hola00');
retorna "00hola".
select trim (both '0' from '00hola00');
retorna "hola".
select trim ('0' from '00hola00');
retorna "hola".
select trim (' hola ');
retorna "hola".
-replace(cadena,cadenareemplazo,cadenareemplazar): retorna la cadena con todas las ocurrencias de la subcadena reemplazo por la subcadena a reemplazar. Ejemplo:
select replace('xxx.mysql.com','x','w');
retorna "www.mysql.com'.
-repeat(cadena,cantidad): devuelve una cadena consistente en la cadena repetida la cantidad de veces especificada. Si "cantidad" es menor o igual a cero, retorna una cadena vacía. Ejemplo:
select repeat('hola',3);
retorna "holaholahola".
-reverse(cadena): devuelve la cadena invirtiendo el order de los caracteres. Ejemplo:
select reverse('Hola');
retorna "aloH".
-insert(cadena,posicion,longitud,nuevacadena): retorna la cadena con la nueva cadena colocándola en la posición indicada por "posicion" y elimina la cantidad de caracteres indicados por "longitud". Ejemplo:
select insert('buenas tardes',2,6,'xx');
retorna ""bxxtardes".
-lcase(cadena) y lower(cadena): retornan la cadena con todos los caracteres en minúsculas. Ejemplo:
select lower('HOLA ESTUDIAnte');
retorna "hola estudiante".
select lcase('HOLA ESTUDIAnte');
retorna "hola estudiante".
-ucase(cadena) y upper(cadena): retornan la cadena con todos los caracteres en mayúsculas. Ejemplo:
select upper('HOLA ESTUDIAnte');
retorna "HOLA ESTUDIANTE".
select ucase('HOLA ESTUDIAnte');
retorna "HOLA ESTUDIANTE".
-strcmp(cadena1,cadena2): retorna 0 si las cadenas son iguales, -1 si la primera es menor que la segunda y 1 si la primera es mayor que la segunda. Ejemplo:
select strcmp('Hola','Chau');
retorna 1.
Un listado completo de todas las funciones para el manejo de cadenas de caracteres de las diferentes versiones de MySQL las podemos consultar en la documentación oficial.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL llamando a funciones para el manejo de cadenas en MySQL:
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16);
select concat_ws('-',titulo,autor)
from libros;
select left(titulo,15)
from libros;
select titulo,insert(editorial,1,0,'edit. ')
from libros;
select lower(titulo), upper(editorial)
from libros;
26 - Funciones matemáticas.
Los operadores aritméticos son "+","-","*" y "/". Todas las operaciones matemáticas retornan "null" en caso de error. Ejemplo:
select 5/0;
MySQL tiene algunas funciones para trabajar con números. Aquí presentamos algunas.
RECUERDE que NO debe haber espacios entre un nombre de función y los paréntesis porque MySQL puede confundir una llamada a una función con una referencia a una tabla o campo que tenga el mismo nombre de una función.
-abs(x): retorna el valor absoluto del argumento "x". Ejemplo:
select abs(-20);
retorna 20.
-ceiling(x): redondea hacia arriba el argumento "x". Ejemplo:
select ceiling(12.34),
retorna 13.
-floor(x): redondea hacia abajo el argumento "x". Ejemplo:
select floor(12.34);
retorna 12.
-greatest(x,y,..): retorna el argumento de máximo valor.
-least(x,y,...): con dos o más argumentos, retorna el argumento más pequeño.
-mod(n,m): significa "módulo aritmético"; retorna el resto de "n" dividido en "m". Ejemplos:
select mod(10,3);
retorna 1.
select mod(10,2);
retorna 0.
- %: %: devuelve el resto de una división. Ejemplos:
select 10%3;
retorna 1.
select 10%2;
retorna 0.
-power(x,y): retorna el valor de "x" elevado a la "y" potencia. Ejemplo:
select power(2,3);
retorna 8.
-rand(): retorna un valor de coma flotante aleatorio dentro del rango 0 a 1.0.
-round(x): retorna el argumento "x" redondeado al entero más cercano. Ejemplos:
select round(12.34);
retorna 12.
select round(12.64);
retorna 13.
-srqt(): devuelve la raiz cuadrada del valor enviado como argumento.
-truncate(x,d): retorna el número "x", truncado a "d" decimales. Si "d" es 0, el resultado no tendrá parte fraccionaria. Ejemplos:
select truncate(123.4567,2);
retorna 123.45;
select truncate (123.4567,0);
retorna 123.
Todas retornan null en caso de error.
Un listado completo de todas las funciones matemáticas de las diferentes versiones de MySQL las podemos consultar en la documentación oficial.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL para probar algunas funciones matemáticas de MySQL:
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.46);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16.31);
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','L. Carroll','Planeta',18.89);
select titulo, ceiling(precio),floor(precio)
from libros;
select titulo, round(precio)
from libros;
select titulo,truncate(precio,1)
from libros;
27 - Funciones para el uso de fecha y hora.
MySQL tiene algunas funciones para trabajar con fechas y horas. Estas son algunas:
-adddate(fecha, interval expresion): retorna la fecha agregándole el intervalo especificado. Ejemplos: adddate('2006-10-10',interval 25 day) retorna "2006-11-04". adddate('2006-10-10',interval 5 month) retorna "2007-03-10".
-adddate(fecha, dias): retorna la fecha agregándole a fecha "dias". Ejemplo: adddate('2006-10-10',25), retorna "2006-11-04".
-addtime(expresion1,expresion2): agrega expresion2 a expresion1 y retorna el resultado.
-current_date: retorna la fecha de hoy con formato "YYYY-MM-DD" o "YYYYMMDD".
-current_time: retorna la hora actual con formato "HH:MM:SS" o "HHMMSS".
-date_add(fecha,interval expresion tipo) y date_sub(fecha,interval expresion tipo): el argumento "fecha" es un valor "date" o "datetime", "expresion" especifica el valor de intervalo a ser añadido o substraído de la fecha indicada (puede empezar con "-", para intervalos negativos), "tipo" indica la medida de adición o substracción. Ejemplo: date_add('2006-08-10', interval 1 month) retorna "2006-09-10"; date_add('2006-08-10', interval -1 day) retorna "2006-09-09"; date_sub('2006-08-10 18:55:44', interval 2 minute) retorna "2006-08-10 18:53:44"; date_sub('2006-08-10 18:55:44', interval '2:3' minute_second) retorna "2006-08-10 18:52:41". Los valores para "tipo" pueden ser: second, minute, hour, day, month, year, minute_second (minutos y segundos), hour_minute (horas y minutos), day_hour (días y horas), year_month (año y mes), hour_second (hora, minuto y segundo), day_minute (dias, horas y minutos), day_second(dias a segundos).
-datediff(fecha1,fecha2): retorna la cantidad de días entre fecha1 y fecha2.
-dayname(fecha): retorna el nombre del día de la semana de la fecha. Ejemplo: dayname('2006-08-10') retorna "thursday".
-dayofmonth(fecha): retorna el día del mes para la fecha dada, dentro del rango 1 a 31. Ejemplo: dayofmonth('2006-08-10') retorna 10.
-dayofweek(fecha): retorna el índice del día de semana para la fecha pasada como argumento. Los valores de los índices son: 1=domingo, 2=lunes,... 7=sábado). Ejemplo: dayofweek('2006-08-10') retorna 5, o sea jueves.
-dayofyear(fecha): retorna el día del año para la fecha dada, dentro del rango 1 a 366. Ejemplo: dayofyear('2006-08-10') retorna 222.
-extract(tipo from fecha): extrae partes de una fecha.
Ejemplos:
extract(year from '2006-10-10'), retorna "2006".
extract(year_month from '2006-10-10 10:15:25') retorna "200610".
extract(day_minute from '2006-10-10 10:15:25') retorna "101015";
Los valores para tipo pueden ser: second, minute, hour, day, month, year, minute_second, hour_minute, day_hour, year_month, hour_second (horas, minutos y segundos), day_minute (días, horas y minutos), day_second (días a segundos).
-hour(hora): retorna la hora para el dato dado, en el rango de 0 a 23.
Ejemplo: hour('18:25:09') retorna "18";
-minute(hora): retorna los minutos de la hora dada, en el rango de 0 a 59.
-monthname(fecha): retorna el nombre del mes de la fecha dada.
Ejemplo: monthname('2006-08-10') retorna "August".
-month(fecha): retorna el mes de la fecha dada, en el rango de 1 a 12.
-now() y sysdate(): retornan la fecha y hora actuales.
-period_add(p,n): agrega "n" meses al periodo "p", en el formato "YYMM" o "YYYYMM"; retorna un valor en el formato "YYYYMM". El argumento "p" no es una fecha, sino un año y un mes. Ejemplo: period_add('200608',2) retorna "200610".
-period_diff(p1,p2): retorna el número de meses entre los períodos "p1" y "p2", en el formato "YYMM" o "YYYYMM". Los argumentos de período no son fechas sino un año y un mes. Ejemplo: period_diff('200608','200602') retorna 6.
-second(hora): retorna los segundos para la hora dada, en el rango de 0 a 59.
-sec_to_time(segundos): retorna el argumento "segundos" convertido a horas, minutos y segundos. Ejemplo: sec_to_time(90) retorna "1:30".
-timediff(hora1,hora2): retorna la cantidad de horas, minutos y segundos entre hora1 y hora2.
-time_to_sec(hora): retorna el argumento "hora" convertido en segundos.
-to_days(fecha): retorna el número de día (el número de día desde el año 0).
-weekday(fecha): retorna el índice del día de la semana para la fecha pasada como argumento. Los índices son: 0=lunes, 1=martes,... 6=domingo). Ejemplo: weekday('2006-08-10') retorna 3, o sea jueves.
-year(fecha): retorna el año de la fecha dada, en el rango de 1000 a 9999. Ejemplo: year('06-08-10') retorna "2006".
Un listado completo de todas las funciones relacionadas a fechas y horas las podemos consultar en la documentación oficial.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL empleando algunas funciones para el manejo de fechas y horas:
drop table if exists prestamos;
create table prestamos(
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de 1 grado','23456789','2006-08-10',date_add('2006-08-10', interval 5 day));
select * from prestamos;
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Alicia en el pais de las maravillas','23456789',
'2006-08-12',date_add('2006-08-12', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('El aleph','22543987','2006-08-15',date_add('2006-08-15', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de geografia 5 grado','25555666','2006-08-30',
date_add('2006-08-30', interval 5 day));
select * from prestamos;
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Atlas universal','24000111',current_date,date_add(current_date, interval 5 day));
select * from prestamos;
Que nos genera una salida similar a esta:
28 - Cláusula order by del select.
Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algún campo, para ello usamos la cláusula "order by".
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el título:
select codigo,titulo,autor,editorial,precio from libros order by titulo;
Aparecen los registros ordenados alfabéticamente por el campo especificado.
También podemos colocar el número de orden del campo por el que queremos que se ordene en lugar de su nombre. Por ejemplo, queremos el resultado del "select" ordenado por "precio":
select codigo,titulo,autor,editorial,precio from libros order by 5;
Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a mayor). Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":
select codigo,titulo,autor,editorial,precio from libros order by editorial desc;
También podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
select codigo,titulo,autor,editorial,precio from libros order by titulo, editorial;
Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido ascendente y "editorial" en sentido descendente:
select codigo,titulo,autor,editorial,preciofrom libros order by titulo asc, editorial desc;
Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo inmediatamente anterior.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists libros;create table libros(codigo int unsigned auto_increment,titulo varchar(40),autor varchar(30),primary key (codigo)editorial varchar(15),precio decimal (5,2) unsigned,);values('El aleph','Borges','Planeta',15.50);insert into libros (titulo,autor,editorial,precio)insert into libros (titulo,autor,editorial,precio)values('Martin Fierro','Jose Hernandez','Planeta',39);values('Martin Fierro','Jose Hernandez','Emece',22.90);insert into libros (titulo,autor,editorial,precio)values('Cervantes y el quijote','Borges','Paidos',35.40);insert into libros (titulo,autor,editorial,precio) values('Aprenda PHP','Mario Molina','Emece',19.50);insert into libros (titulo,autor,editorial,precio)insert into libros (titulo,autor,editorial,precio)order by titulo, editorial;values('Matematica estas ahi', 'Paenza', 'Paidos',19);select codigo,titulo,autor,editorial,preciofrom libros order by titulo;from librosselect codigo,titulo,autor,editorial,precio order by 5;select codigo,titulo,autor,editorial,precioselect codigo,titulo,autor,editorial,precio from librosorder by titulo asc, editorial desc;from libros
Que nos genera una salida similar a esta:
29 - Operadores Lógicos (and - or - not)
Hasta el momento, hemos aprendido a establer una condición con "where" utilizando operadores relacionales. Podemos establecer más de una condición con la cláusula "where", para ello aprenderemos los operadores lógicos.
Son los siguientes:
- and, significa "y",- or, significa "y/o",- xor, significa "o",- not, significa "no", invierte el resultado- (), paréntesis
Los operadores lógicos se usan para combinar condiciones.
Queremos recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos, para ello necesitamos 2 condiciones:
select * from libroswhere (autor='Borges') and(precio<=20);
Los registros recuperados en una sentencia que une 2 condiciones con el operador "and", cumplen con las 2 condiciones.
Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
select * from libroswhere autor='Borges' oreditorial='Planeta';
En la sentencia anterior usamos el operador "or", indicamos que recupere los libros en los cuales el valor del campo "autor" sea "Borges" y/o el valor del campo "editorial" sea "Planeta", es decir, seleccionará los registros que cumplan con la primera condición, con la segunda condición o con ambas condiciones.
Los registros recuperados con una sentencia que une 2 condiciones con el operador "or", cumplen 1 de las condiciones o ambas.
Queremos ver los libros cuyo autor sea "Borges" o cuya editorial sea "Planeta":
select * from libroswhere (autor='Borges') xor(editorial='Planeta');
En la sentencia anterior usamos el operador "xor", indicamos que recupere los libros en los cuales el valor del campo "autor" sea "Borges" o el valor del campo "editorial" sea "Planeta", es decir, seleccionará los registros que cumplan con la primera condición o con la segunda condición pero no los que cumplan con ambas condiciones. Los registros recuperados con una sentencia que une 2 condiciones con el operador "xor", cumplen 1 de las condiciones, no ambas.
Queremos recuperar los libros que no cumplan la condición dada, por ejemplo, aquellos cuya editorial NO sea "Planeta":
select * from libroswhere not (editorial='Planeta');
El operador "not" invierte el resultado de la condición a la cual antecede.
Los registros recuperados en una sentencia en la cual aparece el operador "not", no cumplen con la condición a la cual afecta el "NO".
Los paréntesis se usan para encerrar condiciones, para que se evalúen como una sola expresión.
Cuando explicitamos varias condiciones con diferentes operadores lógicos (combinamos "and", "or") permite establecer el orden de prioridad de la evaluación; además permite diferenciar las expresiones más claramente.
Por ejemplo, las siguientes expresiones devuelven un resultado diferente:
select * from libroswhere (autor='Borges') or(editorial='Paidos' and precio<20);select*from libroswhere (autor='Borges' or editorial='Paidos') and(precio<20);
Si bien los paréntesis no son obligatorios en todos los casos, se recomienda utilizarlos para evitar confusiones.
El orden de prioridad de los operadores lógicos es el siguiente: "not" se aplica antes que "and" y "and" antes que "or", si no se especifica un orden de evaluación mediante el uso de paréntesis.
El orden en el que se evalúan los operadores con igual nivel de precedencia es indefinido, por ello se recomienda usar los paréntesis.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL donde probamos los operadores lógicos and, or, not y xor:
drop table if exists libros;create table libros(codigo int unsigned auto_increment,titulo varchar(40), autor varchar(30),primary key(codigo)editorial varchar(15), precio decimal(5,2), );values('El aleph','Borges','Planeta',15.50);insert into libros (titulo,autor,editorial,precio) insert into libros (titulo,autor,editorial,precio)insert into libros (titulo,autor,editorial,precio)values('Martin Fierro','Jose Hernandez','Emece',22.90); values('Martin Fierro','Jose Hernandez','Planeta',39);values('Cervantes y el quijote','Borges','Paidos',35.40);insert into libros (titulo,autor,editorial,precio) values('Aprenda PHP','Mario Molina','Emece',19.50); insert into libros (titulo,autor,editorial,precio)precio<=20;insert into libros (titulo,autor,editorial,precio) values('Matematica estas ahi', 'Paenza', 'Paidos',19); select * from libros where autor='Borges' and select * from libros where autor='Paenza' or(editorial='Paidos' and precio<20);editorial='Planeta'; select * from libros where (autor='Borges') xor (editorial='Planeta'); select * from libros where not (editorial='Planeta'); select * from libros where (autor='Borges') or select * from librosand (precio<20);where (autor='Borges' or editorial='Paidos')
Que nos genera una salida similar a esta:
30 - Otros operadores relacionales (between - in)
Hemos visto los operadores relacionales:
= (igual), <> (distinto), > (mayor), < (menor), >= (mayor o igual), <= (menor o igual), is null/is not null (si un valor es NULL o no).
Existen otros que simplifican algunas consultas:
Para recuperar de nuestra tabla "libros" los registros que tienen precio mayor o igual a 20 y menor o igual a 40, usamos 2 condiciones unidas por el operador lógico "and":
select * from libros
where precio>=20 and precio<=40;
Podemos usar "between":
select * from libros
where precio between 20 and 40;
"between" significa "entre". Averiguamos si el valor de un campo dado (precio) está entre los valores mínimo y máximo especificados (20 y 40 respectivamente).
Si agregamos el operador "not" antes de "between" el resultado se invierte.
Para recuperar los libros cuyo autor sea 'Paenza' o 'Borges' usamos 2 condiciones:
select * from libros
where autor='Borges' or autor='Paenza';
Podemos usar "in":
select * from libros
where autor in('Borges','Paenza');
Con "in" averiguamos si el valor de un campo dado (autor) está incluido en la lista de valores especificada (en este caso, 2 cadenas).
Para recuperar los libros cuyo autor no sea 'Paenza' ni 'Borges' usamos:
select * from libros where autor<>'Borges' and autor<>'Paenza';
También podemos usar "in" :
select * from libros
where autor not in ('Borges','Paenza');
Con "in" averiguamos si el valor del campo está incluido en la lista, con "not" antecediendo la condición, invertimos el resultado.
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL para utilizar los operadores relacionales 'between' y 'in':
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
select * from libros
where precio>=20 and
precio<=40;
select * from libros
where precio between 20 and 40;
select * from libros
where autor='Borges' or
autor='Paenza';
select * from libros
where autor in('Borges','Paenza');
select * from libros
where autor<>'Borges' and
autor<>'Paenza';
select * from libros
where autor not in ('Borges','Paenza');
Que nos genera una salida similar a esta:
31 - Búsqueda de patrones (like y not like)
Hemos realizado consultas utilizando operadores relacionales para comparar cadenas. Por ejemplo, sabemos recuperar los libros cuyo autor sea igual a la cadena "Borges":
select * from libros
where autor='Borges';
Los operadores relacionales nos permiten comparar valores numéricos y cadenas de caracteres. Pero al realizar la comparación de cadenas, busca coincidencias de cadenas completas.
Imaginemos que tenemos registrados estos 2 libros:
El Aleph de Borges;
Antologia poetica de J.L. Borges;
Si queremos recuperar todos los libros cuyo autor sea "Borges", y especificamos la siguiente condición:
select * from libros
where autor='Borges';
sólo aparecerá el primer registro, ya que la cadena "Borges" no es igual a la cadena "J.L. Borges".
Esto sucede porque el operador "=" (igual), también el operador "<>" (distinto) comparan cadenas de caracteres completas. Para comparar porciones de cadenas utilizamos los operadores "like" y "not like".
Entonces, podemos comparar trozos de cadenas de caracteres para realizar consultas. Para recuperar todos los registros cuyo autor contenga la cadena "Borges" debemos tipear:
select * from libros
where autor like "%Borges%";
El símbolo "%" (porcentaje) reemplaza cualquier cantidad de caracteres (incluyendo ningún caracter). Es un caracter comodín. "like" y "not like" son operadores de comparación que señalan igualdad o diferencia.
Para seleccionar todos los libros que comiencen con "A":
select * from libros
where titulo like 'A%';
Note que el símbolo "%" ya no está al comienzo, con esto indicamos que el título debe tener como primera letra la "A" y luego, cualquier cantidad de caracteres.
Para seleccionar todos los libros que no comiencen con "A":
select * from libros
where titulo not like 'A%';
Así como "%" reemplaza cualquier cantidad de caracteres, el guión bajo "_" reemplaza un caracter, es el otro caracter comodín. Por ejemplo, queremos ver los libros de "Lewis Carroll" pero no recordamos si se escribe "Carroll" o "Carrolt", entonces tipeamos esta condición:
select * from libros
where autor like "%Carrol_";
Si necesitamos buscar un patrón en el que aparezcan los caracteres comodines, por ejemplo, queremos ver todos los registros que comiencen con un guión bajo, si utilizamos '_%', mostrará todos los registros porque lo interpreta como "patrón que comienza con un caracter cualquiera y sigue con cualquier cantidad de caracteres". Debemos utilizar "\_%", esto se interpreta como 'patrón que comienza con guión bajo y continúa con cualquier cantidad de caracteres". Es decir, si queremos incluir en una búsqueda de patrones los caracteres comodines, debemos anteponer al caracter comodín, la barra invertida "\", así lo tomará como caracter de búsqueda literal y no como comodín para la búsqueda. Para buscar el caracter literal "%" se debe colocar "\%".
Servidor de MySQL instalado en forma local.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
insert into libros (titulo,autor,editorial,precio)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00);
insert into libros (titulo,autor,editorial,precio)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',36.00);
select * from libros
where autor='Borges';
select * from libros
where autor like '%Borges%';
select * from libros
where titulo like 'A%';
select * from libros
where titulo not like 'A%';
select * from libros
where autor like '%Carrol_';
select * from libros
where titulo like '%Harry Potter%';
select * from libros
where titulo like '%PHP%';
Que nos genera una salida similar a esta:
1 - ¿Qué es PHP?
PHP (acrónimo de "PHP: Hypertext Preprocessor") es un lenguaje interpretado de alto nivel embebido en páginas HTML y ejecutado en el servidor.
Hay que entender primero como funciona la solicitud de páginas en un navegador para comenzar a programar en PHP.
Comunicación entre el cliente y el servidor sin PHP:
1 - Tipeamos en la barra del navegador la dirección y el archivo a solicitar.
2 - El web browser (navegador) envía el mensaje a través de Internet a la computadora, por ejemplo www.lanacion.com/pagina1.htm solicitando la página (archivo) pagina1.htm
3 - El web server (servidor web, que puede ser el Apache, IIS, etc.) que es un programa que se ejecuta en la máquina www.lanacion.com, recibe el mensaje y lee el archivo solicitado desde el disco duro.
4 - El servidor web envía el archivo solicitado por el navegador tal cual está en el disco duro.
5 - El navegador muestra en pantalla el archivo que envió el servidor web.
Este proceso siempre es el mismo cuando hablamos de páginas estáticas (páginas que no cambian), cualquiera sea el cliente que solicita la página el contenido siempre será el mismo.
La única forma que el contenido del archivo cambie es que el administrador de ese sitio web edite el contenido del archivo pagina1.htm y haga modificaciones.
Comunicación entre el cliente y el servidor con PHP:
1 - Tipeamos en la barra del navegador la dirección y el archivo a solicitar.
2 - El web browser (navegador) envía el mensaje a través de Internet a la computadora llamada www.lanacion.com solicitando la página (archivo) pagina1.php
3 - El web server (servidor web, que puede ser el Apache, IIS, etc.), recibe el mensaje y al ver que la extension es "php" solicita al interprete de PHP (que es otro programa que se ejecuta en el servidor web) que le envíe el archivo.
4 - El intérprete PHP lee desde el disco el archivo pagina1.php
5 - El intérprete PHP ejecuta los comandos contenidos en el archivo y eventualmente se comunica con un gestor de base de datos (ejemplos de ellos pueden ser MySql, MariaDB, Oracle, Informix, SQL Server, etc.)
6 - Luego de ejecutar el programa contenido en el archivo envía éste al servidor web.
7 - El servidor web envía la página al cliente que la había solicitado.
8 - El navegador muestra en pantalla el archivo que envió el servidor web.
Para aquellas personas que conocen otros lenguajes de programación (C - Java - C# - Pascal etc.) la salida de los resultados normalmente es la pantalla, en PHP la salida es la página HTML (luego ésta viaja por internet y llega al cliente que la solicitó)
2 - Instalación del entorno XAMPP
Actualmente XAMPP es el entorno más popular de desarrollo con PHP. Este software contiene todo lo que necesitamos para probar en forma local en nuestro equipo los programas que codifiquemos en PHP.
Procedemos a descargar XAMPP de la siguiente página: aquí.
Luego de descargarlo procedemos a ejecutar el instalador:
Seleccionamos los programas mínimos que necesitamos para trabajar con PHP, MySQL, Apache y phpMyAdmin:
Elegimos el directorio donde se instalará":
Luego comienza la instalación propiamente del software:
Una vez finalizada la instalación aparece un diálogo con un 'checkbox' para iniciar el programa XAMPP inmediatamente:
Si dejamos chequeada la opción "Do you want to start the Control Panel now?" se inicia el XAMPP
Debemos iniciar los programas "Apache" y "MySQL" presionando los botones 'Start':
Si el software está correctamente instalado y no hay conflicto con otros deberán aparecer en verde los paneles de estado.
Siempre que codifiquemos y probemos los programas en PHP el programa XAMPP junto con 'Apache' y 'MySQL' deben estar ejecutandose.
En el escritorio aparece un ícono del panel de control de XAMPP o podemos arrancarlo desde el directorio donde lo instalamos mediante el programa:
El siguiente paso es probar nuestro primer programa en PHP.
Acotaciones
Existe otro entorno popular llamado WAMPSERVER que nos instala y administra PHP, MySQL y Apache.
Si ya lo tiene instalado y ya está habituado a trabajar con él, no es necesario que instale el XAMPP.
El entorno de WAMPSERVER lo puede descargar del sitio: WAMPSERVER.
3 - Programa "Hola Mundo" en PHP
En este curso suponemos que conoce los elementos principales de HTML y algún lenguaje de programación, por lo menos un poquito (puedes iniciar los conceptos básicos de programación en JavaYa)
Para agregar un programa PHP dentro de una página HTML debemos por un lado al crear el archivo definirlo con extensión php (a diferencia de las páginas estáticas que tienen extensión htm o html) y dentro del contenido de la página, encerrar el programa entre los símbolos
<?php [aquí el programa PHP] ?>
El comando de PHP para imprimir dentro de la página se llama echo. Nuestro programa "Hola Mundo" será entonces:
pagina1.php
<html> <head></head> <body> <?php echo "Hola Mundo"; ?> </body> </html>
Es decir que la página que se generará al ejecutarse el programa será:
<html> <head></head> <body> Hola Mundo</body> </html>
Podemos utilizar como editor de texto para codificar el programa PHP el VS Code.
VS Code: Es un editor de texto que agregando extensiones podemos trabajar con PHP con herramientas para programar y depurar programas. Es creado y mantenido por la empresa Microsoft. Es open source y multiplataforma (Windows, Linux y Mac)
En el último año se esta convirtiendo en el editor de texto más utilizado por los programadores profesionales de todo el mundo.
Podemos comprobar esta situación si visitamos la encuesta de desarrolladores 2019 del sitio de stackoverflow
Le sugiero si va ha utilizar el VS Code, luego se tome su tiempo para conocer en forma más profunda el editor VS Code mediante el tutorial VS Code Ya
Luego de tipear el programita con el editor de texto:
Debemos almacenar dicho archivo en la subcarpeta 'htdocs' que depende de la carpeta 'xampp' (en mi caso instalé el XAMPP en c:\xampp)
Lo almacenamos con el nombre pagina1.php en la carpeta C:\xampp\htdocs
Este directorio es el que el servidor web Apache tiene asignado para recuperar páginas cuando se las solicitamos desde un navegador.
Ya tenemos almacenado el archivo en la carpeta 'htdocs' del 'xampp', ahora procedemos a solicitar dicha página desde un navegador web, para esto en la barra del navegador escribimos:
http://localhost/pagina1.php
Tenemos en el navegador el resultado de la ejecución del programa.
Como podemos ver, es muy poco útil este programita, ya que el resultado de la ejecución de este programa PHP será siempre el mismo, es decir mostrar el texto "Hola Mundo".
PROBLEMA RESUELTO.
Copiar el contenido de este cuadro de texto al VS Code y almacenarlo en la carpeta c:\xampp\htdocs con un nombre con extensión php.
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear:
http://localhost/pagina1.php (o el nombre del archivo que le dió)
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear:
http://localhost/pagina1.php (o el nombre del archivo que le dió)
4 - Un programita más útil que "Hola Mundo"
Un problema sencillo que se nos puede presentar y que no se puede resolver empleando solo HTML es que una página esté disponible sólo los 10 primeros días del mes.
Mostraremos un cartel que diga que el sitio se encuentra disponible si la fecha es menor o igual a 10, en caso contrario mostraremos un mensaje de sitio fuera de servicio.
Para obtener la fecha del servidor web debemos llamar a la función date y requerir sólo el día:
$dia=date("d");
A las variables en PHP se les antecede el caracter $. Si a la función date le pasamos el string "d" retornará sólo el día (si queremos la fecha completa: $fecha=date("d/m/Y")
Para verificar si la variable $dia es menor o igual a 10, debemos emplear la instrucción if, similar a otros lenguajes.
Entonces la página con el programa queda de la siguiente forma:
pagina1.php
<html> <head></head> <body> <?php $dia = date("d"); if ($dia <= 10) { echo "sitio activo"; } else { echo "sitio fuera de servicio"; } ?> </body> </html>
Los nombres de variables son sensibles a mayúsculas y minúsculas, por lo que si la escribimos en minúscula inicialmente debemos respetar en el resto del programa. En cambio las instrucciones del lenguaje PHP no son sensibles por lo que si deseamos escribir IF o if, las dos formas estarán bien (es más común escribir las palabras claves siempre en minúsculas)
La condición del if debe ir obligatoriamente entre paréntesis. Los operadores relacionales disponibles son:
> Mayor
>= Mayor o igual
< Menor
<= Menor o igual
== Igual
!= Distinto
Si la condición se verifica verdadera se ejecuta el primer bloque encerrado entre llaves, en caso de verificarse falsa la condición se ejecuta el bloque entre llaves que le sigue al else.
PROBLEMA RESUELTO.
Copiar el contenido de este cuadro de texto al VS Code y almacenarlo en la carpeta c:\xampp\htdocs con un nombre con extensión php.
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear:
http://localhost/pagina1.php (o el nombre del archivo que le dió)
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear:
http://localhost/pagina1.php (o el nombre del archivo que le dió)
PROBLEMA PROPUESTO.
Sabiendo que la función rand nos retorna un valor aleatorio entre un rango de dos enteros:
$num=rand(1,100);
En la variable $num se almacena un valor entero que la computadora genera en forma aleatoria entre 1 y 100.
Hacer un programa que lo muestre por pantalla al valor generado. Mostrar además si es menor o igual a 50 o si es mayor.
Para imprimir el contenido de una variable también utilizamos el comando echo:
echo $num;
5 - Tipos de variables
Los nombres de variables comienzan con el caracter $ y son sensibles a mayúsculas y minúsculas (no así las palabras claves del lenguaje)
En PHP no es necesario definir el tipo de dato que almacena antes de utilizarla, las mismas se crean en el momento de emplearlas. Las variables se declaran cuando se le asigna un valor, por ejemplo:
$dia = 24; //Se declara una variable de tipo integer.
$sueldo = 758.43; //Se declara una variable de tipo double.
$nombre = "juan"; //Se declara una variable de tipo string.
$exite = true; //Se declara una variable boolean.
También podemos hacer notar que para disponer comentarios de línea debemos utilizar dos caracteres //
Para la impresión de variables utilizaremos inicialmente el comando echo. Un programa completo que inicializa y muestra el contenido de cuatro variables de distinto tipo es:
pagina1.php
<html> <head> <title>Problema</title> </head> <body> <?php $dia = 24; //Se declara una variable de tipo integer. $sueldo = 758.43; //Se declara una variable de tipo double. $nombre = "juan"; //Se declara una variable de tipo string. $exite = true; //Se declara una variable boolean. echo "Variable entera:"; echo $dia; echo "<br>"; echo "Variable double:"; echo $sueldo; echo "<br>"; echo "Variable string:"; echo $nombre; echo "<br>"; echo "Variable boolean:"; echo $exite; ?> </body> </html>
Hemos utilizado un comando echo para mostrar los mensajes, otro el contenido de variables y finalmente otro para imprimir un elemento HTML. Este proceso puede acortarse un poco pero para que sea más claro inicialmente tomaremos el camino largo de hacer la impresión de un dato con cada comando echo.
6 - Variables de tipo string
Una variable de este tipo puede almacenar una serie de caracteres.
$cadena1="Hola";
$cadena2="Mundo";
echo $cadena1." ".$cadena2;
Para concatenar string empleamos el operador . (punto)
Tengamos en cuenta que el comando echo de más arriba lo podemos hacer más largo de la siguiente forma:
echo $cadena1;
echo " ";
echo $cadena2;
A medida que uno haga ejercicios podremos resumir en un solo comando echo la salida de múltiples variables.
Cuando una cadena encerrada entre comillas dobles contiene una variable en su interior, ésta se trata como tal, por lo tanto se utilizará su contenido para el almacenamiento:
$dia=10;
$fecha="Hoy es $dia";
echo $fecha;
En pantalla se muestra: Hoy es 10
Es decir, en la cadena, se sustituye el nombre de la variable $dia, con el contenido de la misma.
Una cadena se puede definir con las comillas simples (pero es importante tener en cuenta que no se sustituyen las variables si empleamos comillas simples):
$nombre='juan carlos';
Veremos que en muchos casos se utiliza el concepto de sustitución de variables dentro de un string en PHP por lo que nos acostumbraremos en un principio a utilizar las comillas dobles para definir los string en nuestros programas.
7 - Estructura condicional (if)
Cuando se pretende que el programa, una vez llegado a un cierto punto, tome un camino concreto en determinados casos y otro diferente si las condiciones de ejecución difieren, se utiliza el conjunto de instrucciones:
if, else y elseif. La estructura base de este tipo de instrucciones es la siguiente:
if, else y elseif. La estructura base de este tipo de instrucciones es la siguiente:
if (Condición)
{
Instrucción a1;
Instrucción a2;
}
else
{
Instrucción b1;
Instrucción b2;
}
Cuando la ejecución llega al punto donde se encuentra la instrucción if, el programa verificará el cumplimiento o no de la condición. Si la condición es verdadera se ejecutarán las instrucciones a1 y a2, de lo contrario, se ejecutarán las instrucciones b1 y b2.
En los casos en que las condiciones sean varias, se pueden utilizar los if de un modo denominado anidado o anillado, como se indica de la manera siguiente:
if (Condicion 1)
{
Instrucción a1;
Instrucción a2;
}
else
{
if (Condicion 2)
{
Instrucción b1;
Instrucción b2;
}
else
{
Instrucción c1;
Instrucción c2;
}
}
De este modo se pueden introducir tantas condiciones como se quiera dentro de la condición principal. Una variante de este sistema es utilizando la sentencia elseif, que permite en una sola línea introducir una condición adicional:
if (Condicion 1)
{
Instrucción a1;
Instrucción a2;
}
elseif (Condicion 2)
{
Instrucción b1;
Instrucción b2;
}
else
{
Instrucción c1;
Instrucción c2;
}
Para las condiciones tener en cuenta que disponemos de los siguientes operadores:
== para ver si una variable es igual a otra.
!= distinto.
>= mayor o igual.
> mayor.
<= menor o igual
< menor
La mejor forma de entender esta estructura condicional es por medio de ejemplos. El primero que nos plantearemos es generar un valor aleatorio (es decir lo elige la máquina al azar, como extraer una bolilla de un bolillero de lotería) comprendido entre 1 y 10. Luego mostraremos un mensaje si es menor o igual a 5 o si es mayor a 5.
El programa completo es:
pagina1.php
<html> <head> <title>Problema</title> </head> <body> <?php $valor = rand(1, 10); echo "El valor sorteado es $valor<br>"; if ($valor <= 5) { echo "Es menor o igual a 5"; } else { echo "Es mayor a 5"; } ?> </body> </html>
Es importante recordar que siempre la condición del if debe ir entre paréntesis. Si la condición del if se verifica verdadera (es decir el número sorteado es menor o igual a 5) ejecuta el primer bloque que se encuentra entre llaves. En caso de verificarse falsa la condición del if se ejecuta el bloque entre llaves que se encuentra después del else.
El valor aleatorio lo generamos llamando a la función rand pasándole el valor mínimo y máximo:
$valor=rand(1,10);
Imprimimos el valor generado a los efectos de controlar el resultado:
echo "El valor sorteado es $valor<br>";
En el primer problema tenemos solo dos caminos posibles, el valor es menor o igual a cinco o es mayor.En un segundo ejemplo mostraremos como disponer una estructura condicional if anidada.
El problema es el siguiente: Generar un valor aleatorio entre 1 y 100. Luego mostrar si tiene 1,2 o 3 dígitos.
Como podemos observar estamos en presencia de un problema que tiene tres caminos posibles. El valor puede tener 1 dígito, 2 dígitos o 3 dígitos. Si pensamos un poco podremos identificar que para que tenga un dígito debe generarse un valor entre 1 y 9, para que tenga dos dígitos deberá estar comprendido entre 10 y 99, y finalmente para tener 3 dígitos deberá ser el valor 100.
La página con el programa respectivo es:
<html> <head> <title>Problema</title> </head> <body> <?php $valor = rand(1, 100); echo "El valor sorteado es $valor<br>"; if ($valor <= 9) { echo "Tiene un dígito"; } else { if ($valor < 100) { echo "Tiene 2 dígitos"; } else { echo "Tiene 3 dígitos"; } } ?> </body> </html>
Es importante notar como la segunda estructura if se encuentra contenida entre las llaves del else del primer if. Es decir que si el valor aleatorio es menor o igual a 9 se ejecuta el bloque del verdadero del primer if y no se ejecuta por lo tanto el if anidado en el else. Por el contrario si la condición del primer if se verifica falsa se ejecuta el bloque del else del primer if, la misma contiene una estructura if con sus bloques del verdadero y falso.
A modo ilustrativo el mismo ejemplo resuelto con la estructura if/elseif será:
<html> <head> <title>Problema</title> </head> <body> <?php $valor = rand(1, 100); echo "El valor sorteado es $valor<br>"; if ($valor <= 9) { echo "Tiene un dígito"; } elseif ($valor < 100) { echo "Tiene 2 dígitos"; } else { echo "Tiene 3 dígitos"; } ?> </body> </html>
Si uno tiene mucha práctica con otros lenguajes de programación esta estructura de if anidados le será mas adecuada, en caso que haya empezado a programar hace poco será conveniente que elija y practique la primera forma.
8 - Estructuras repetitivas (for - while - do/while)
Las estructuras repetitivas son similares al lenguaje C, JavaScript, Java etc.
Estructura for:
for([Inicialización de la variable];[Condición];[Incremento o decremento de la variable])
{
[Instrucciones];
}
El primer ejemplo que haremos es mostrar en la página los números del 1 al 100:
pagina1.php
<html> <head> <title>Problema</title> </head> <body> <?php for ($f = 1; $f <= 100; $f++) { echo $f; echo "<br>"; } ?> </body> </html>
Quien no ha visto la estructura for en otro lenguaje pasamos a explicarla:
for ($f = 1; $f <= 100; $f++) {
echo $f;
echo "<br>";
}
El primer argumento del for es la inicialización de una variable, en este caso se inicializa la variable $f con el valor 1. Este primer argumento del for se ejecuta solo una vez. Luego se ejecuta el segundo argumento que es la condición. Si la misma se verifica como verdadera se ejecuta todo el bloque comprendido entre las llaves de apertura y cerrado. Luego de haberse ejecutado el bloque repetitivo se ejecuta el tercer argumento del for que es el incremento de la variable, en este caso $f++ incrementa el contenido de la variable $f en 1 (también podemos poner en lugar de $f++ la asignación $f=$f+1)
Luego del incremento de la variable se ejecuta nuevamente la condición del for (segundo argumento), de validarse nuevamente verdadero pasa a ejecutar el bloque repetitivo.
Este ciclo se repite hasta que la condición del for se verifica falsa.
Este ciclo se repite hasta que la condición del for se verifica falsa.
La segunda estructura repetitiva es:
while (condición)
{
[Instrucciones];
}
Esta estructura está en casi todos los lenguajes. El bloque se repite mientras la condición del while sea verdadera.
La condición del while se verifica antes de ingresar al bloque a repetir. Si la misma se verifica falsa la primera vez no se ejecutará el bloque.
Veamos un ejemplo: Generar un valor aleatorio entre 1 y 100, luego imprimir en la página desde 1 hasta el valor generado (de uno en uno):
<html> <head> <title>Problema</title> </head> <body> <?php $valor = rand(1, 100); $inicio = 1; while ($inicio <= $valor) { echo $inicio; echo "<br>"; $inicio++; } ?> </body> </html>
La variable $inicio tiene el valor 1 antes de ingresar al while. Cada vez que se ejecuta una vez el bloque del while se incrementa $inicio en uno. Cuando $inicio supere la variable $valor finalizará la estructura repetitiva y pasará a ejecutarse la instrucción inmediatamente siguiente a la llave de cerrado del while.
Es importante notar que luego de la condición del while NO disponemos PUNTO y COMA.
Por último tenemos en el lenguaje una estructura repetitiva similar al while llamada do/while, donde la condición se verifica luego de ejecutarse el bloque repetitivo.
do
{
[Instrucciones];
} while (condición);
Queda como tarea intentar hacer una página empleando esta estructura. Tener en cuenta que al final de la línea del do/while SI LLEVA punto y coma.
9 - Envío de datos de un FORMULARIO (controles text y submit)
Una actividad fundamental en PHP es la recolección de datos de un formulario HTML.
El proceso para el manejo de FORMULARIOS requiere generalmente dos páginas, una que implementa el formulario y otra que procesa los datos cargados en el formulario.
La estructura mínima de un formulario es la siguiente: para la entrada de un nombre de persona, un objeto text y un botón para el envío del dato al servidor:
pagina1.html
<html> <head> <title>Formulario de entrada del dato</title> </head> <body> <form method="post" action="pagina2.php"> Ingrese su nombre: <input type="text" name="nombre"> <br> <input type="submit" value="confirmar"> </form> </body> </html>
Esta página está completamente codificada en HTML, es decir no hay un script en PHP, el formulario contiene elementos HTML puros.
El elemento <form> y </form> nos permite definir un formulario en la página.
Este elemento tiene dos propiedades que debemos inicializar obligatoriamente: action y method.
La propiedad action indica el nombre del archivo que recibirá los datos ingresados por el operador en el formulario y que serán enviados al servidor cuando se presione el botón (submit). La propiedad method indica como se organizan esos datos para enviarlos al servidor, pudiendo ser mediante los métodos post o get (normalmente los datos de un formulario se envían mediante el método post).
Para crear un cuadro de texto para el ingreso del nombre debemos definir un objeto de tipo "text" y darle un nombre:
<input type="text" name="nombre">
La propiedad type nos permite definir el tipo de control y con la propiedad name indicamos el nombre del control.
Por último todo formulario tiene un botón de tipo submit:
<input type="submit" value="confirmar">
También utilizamos el elemento input pero en la propiedad type indicamos que se trata de un botón de envío de datos. En la propiedad value indicamos el texto que queremos que aparezca en el botón.
Ahora necesitamos una página con un pequeño programa en PHP que procese los datos ingresados en el formulario:
pagina2.php
<html> <head> <title>Captura de datos del form</title> </head> <body> <?php echo "El nombre ingresado es:"; echo $_REQUEST['nombre']; ?> </body> </html>
Para acceder al dato en PHP se cuenta con un vector llamado $_REQUEST indicando como subíndice el nombre del cuadro de texto que definimos en el formulario (dicho nombre es sensible a mayúsculas y minúsculas)
Es común indicar entre comillas simples el subíndice en lugar de comillas dobles (con comillas dobles también funciona)
Es común indicar entre comillas simples el subíndice en lugar de comillas dobles (con comillas dobles también funciona)
En nuestro problema sólo mostramos por pantalla el valor ingresado en el formulario HTML:
echo $_REQUEST['nombre'];
10 - FORMULARIO (control radio)
El control HTML radio generalmente se utiliza en conjunto con otros controles radio. Cuando agrupamos un conjunto de controles radio solo uno de ellos puede estar seleccionado y si seleccionamos otro se desmarca el actual.
Para analizar este control dispondremos un ejemplo:
Implementar un formulario que solicite la carga de dos enteros, uno en cada text.
Disponer dos controles de tipo radio que nos permitan seleccionar si queremos sumar o restar los dos valores ingresados:
Disponer dos controles de tipo radio que nos permitan seleccionar si queremos sumar o restar los dos valores ingresados:
pagina1.html
<html> <head> <title>Problema</title> </head> <body> <form action="pagina2.php" method="post"> Ingrese primer valor: <input type="text" name="valor1"> <br> Ingrese segundo valor: <input type="text" name="valor2"> <br> <input type="radio" name="radio1" value="suma">sumar <br> <input type="radio" name="radio1" value="resta">restar <br> <input type="submit" name="operar"> </form> </body> </html>
Es importante notar que se trata nuevamente de un archivo HTML puro, que no tiene código PHP.
La entrada de los dos números se efectúa en dos controles
La entrada de los dos números se efectúa en dos controles
<input type="text" name="valor1">
<input type="text" name="valor2">
Es importante notar que cada text tiene un name DIFERENTE.
Para seleccionar el tipo de operación a efectuar disponemos dos controles de tipo radio:
<input type="radio" name="radio1" value="suma">sumar
<input type="radio" name="radio1" value="resta">restar
Ahora vemos que los dos controles de tipo radio tienen el MISMO nombre. Esto es necesario para que el navegador sepa que los dos controles están relacionados (recordar que cuando uno selecciona un radio se debe deseleccionar el otro)
Desde la otra página accederemos al value del control seleccionado.
Por último disponemos un control de tipo submit para el envío de los datos del formulario.
El código de la página que procesa el formulario, llamada:"pagina2.php" (la que indicamos en el elemento FORM del formulario) es:
pagina2.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
if ($_REQUEST['radio1'] == "suma") {
$suma = $_REQUEST['valor1'] + $_REQUEST['valor2'];
echo "La suma es:" . $suma;
} else {
if ($_REQUEST['radio1'] == "resta") {
$resta = $_REQUEST['valor1'] - $_REQUEST['valor2'];
echo "La resta es:" . $resta;
}
}
?>
</body>
</html>
El vector asociativo $_REQUEST tiene tres componentes:
$_REQUEST['radio1']
$_REQUEST['valor1']
$_REQUEST['valor2']
En la componente $_REQUEST['radio1'] almacena la cadena "suma" o "resta" según cual se seleccionó en el formulario.
Con dos if verificamos cual operación está seleccionada y procedemos a efectuarla:
if ($_REQUEST['radio1'] == "suma") { $suma = $_REQUEST['valor1'] + $_REQUEST['valor2']; echo "La suma es:" . $suma; } else { if ($_REQUEST['radio1'] == "resta") { $resta = $_REQUEST['valor1'] - $_REQUEST['valor2']; echo "La resta es:" . $resta; } }
#1
Comentarios
Publicar un comentario