Issuu on Google+

i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

INTRODUCCIÓN A LAS BASES DE DATOS PALABRA

PALABRA :

Para poder disfrutar de tu base de datos MySql en i (españa), es necesario que contrates antes nuestro albergamiento Plus (o nuestro pack Plus), una oferta que además te permitirá alojar tu sitio sin publicidad y disfrutar de más ventajas. Para más información:

Submit Query

.

http://www.iespana.es/heberg/accueil Una vez contratado tu albergue, dentro de "mi sitio" encontrarás el enlace para activar tu base de datos MySql, que creará también una carpeta "iphp" a la raíz de tu sitio: es allí donde deberás colocar todos los ficheros que conectarán con la base. ¿Pero qué es una base de datos? Lo que popularmente se conoce como Bases de datos SQL se refiere realmente al término "Sistema gestor de bases de datos (SGBD)". Sistemas gestores de bases de datos hay muchos, en nuestro caso estudiaremos aquellos que se caracterizan por usar el lenguaje SQL (Standard Query Language) como interfaz, un lenguaje que nos permitirá comunicarnos fácilmente y de forma estructurada con el SGBD. Volviendo al término práctico, un Sistema Gestor de Bases de Datos contiene una o más Bases de Datos (BD). Una base de datos contiene una o más tablas, éstas contienen registros que serán uno o más campos. El concepto es bastante sencillo: Un campo puede ser : Nombre, por ejemplo. Un registro será un conjunto de campos: Nombre, Apellidos, Dirección, Teléfono,... Una tabla será un conjunto de registros (con contenidos):

Nombre

Apellidos

Dirección

Teléfono

Paco

Perez García

C/ Avila

555 55 55

Octavio

Sanchez Menendez

C/ Princesa

123 45 67

..

..

..

..

Y una base de datos será un conjunto de tablas (que pueden estar relacionadas entre ellas, aunque esto requiere mayor experiencia). SGBDs hay muchos en el mercado, los más conocidos son on Oracle, Ms SQLServer, Sybase, etc. (éstas son de pago). Pero también son muy conocidas las bases de datos MySQL, PostGreSQL, mSQL por su alto rendimiento y por su carácter "gratuito" o "semi-gratuito". Este tutorial está orientado a MySQL, aunque para el resto es similar. Todas las bases de datos antes expuestas se cacterizan por soportar SQL, un lenguaje estandar que se define en el documento ANSI SQL92, aunque cada servidor utiliza ó modifica este estándar en función de sus necesidades. Respecto a MySQL recomendamos la documentación disponible en:

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_1.htm (1 of 2) [09/12/02 11:05:32 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html

Envia esta página a un amigo

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_1.htm (2 of 2) [09/12/02 11:05:32 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

CONECTAR CON NUESTRA BASE DE DATOS PALABRA

PALABRA :

Una vez activada la base de datos, PHP dispone de una serie de funciones para conectar con ella. La función que debes usar para conectar es:

Submit Query

.

int mysql_connect (string [hostname], string [username], string [password]) Hostname : el servidor, en nuestro caso: mysql1.opsion.fr Username : tu cuenta en i (españa), añadiendo "db_" al principio y "_es" al final (por ejemplo: "db_iwebmaster_es") Password : la contraseña de tu sitio. Esta función nos retorna un "identificador de conexión". Es simplemente un identificador que más tarde tendremos que reutilizar. Por ejemplo: <HTML> <HEAD> </HEAD> <BODY> <? $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es", "password"); if ($idconnect==0) echo "Lo sentimos no se ha podido conectar con la base de datos."; else echo "Enhorabuena, se ha conectado con la base de datos."; mysql_close($idconnect); ?> </BODY> </HTML> if: el resultado de mysql_connect será mayor de 0 si se ha conseguido conectar con la base de datos y 0 en caso contrario. mysql_close: mysql_close es una función que cierra el enlace con la base de datos que anteriormente se ha abierto. No es necesaria su invocación, pues al finalizar el código php, se cerrarán todas las conexiones. Sin embargo, sí será necesaria si deseamos realizar dos conexiones a bases de datos distintas en la misma página php; primero habrá que cerrar la que tengamos abierta y luego volver a conectar. Ejecutar ejemplo.

Envia esta página a un amigo

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_2.htm (1 of 2) [09/12/02 11:05:57 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_2.htm (2 of 2) [09/12/02 11:05:57 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

TRABAJAR CON LA BASE DE DATOS PALABRA

PALABRA :

Con la base de datos trabajaremos en SQL, es decir, con sentencias SQL. SQL tiene sentencias para casi todo, para crear una base de datos, crear una tabla, destruir una tabla, etc., pero eso lo haremos con el administrador phpMyAdmin que tammbién proporciona i (españa).

Submit Query

.

Lo que más nos interesa de SQL es : 1º Como introducir datos. 2º Como extraer datos. 3º Como modificar datos. 4º Como eliminar datos. Estas operaciones las veremos más tarde con algunos ejemplos. Otra pregunta llegado este momento es: si no conozco SQL, cómo hago esas operaciones con PHP. Es muy sencillo, con las funciones: int mysql_query (string query, int [link_identifier]); query: Petición en sintaxis SQL (que veremos más tarde). link_identifier: Identificador de conexión (lo que retorna mysql_connect). Esta función retornará un "identificador de resultado", un "resultado" al que luego podremos acceder. Este resultado será mayor de 0 si la consulta ha sido satisfactoria y 0, si no ha sido satisfactoria (por ejemplo, si tenemos algún error en la sentencia SQL). El acceder al resultado de un mysql_query dependerá del tipo de consulta que hagamos (introducir datos, extraer datos, modificar datos ó eliminar datos). Por ejemplo, chequeador del nº de registros de la base de datos: <HTML> <HEAD></HEAD> <BODY> <? $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es", "password"); if ($idconnect==0) echo "Lo sentimos no se ha podido conectar con la base de datos."; else { mysql_select_db("db_iwebmaster_es",$idconnect); $idresult=mysql_query ("SELECT count(*) from usuarios;",$idconnect); if ($idresult==0) echo "La sentencia es incorrecta."; else { $nregistrostotal=mysql_result ($idresult,0,0);

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_3.htm (1 of 2) [09/12/02 11:06:09 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL echo "Hay $nregistrostotal registros en la base de datos."; mysql_free_result($idresult); } } mysql_close($idconnect); ?> </BODY> </HTML> Ejecutar este ejemplo mysql_select_db: es una función que hay que invocar después de cualquier mysql_connect, siempre que el resultado haya sido correcto. Esta función selecciona la base de datos que queremos utilizar, en nuestro caso coincide con nuestro nombre de cuenta en i (españa), añadiendo "db_" al principio y seguido de "_es" (por ejemplo: "db_iwebmaster_es"). mysql_result: es una función que permite acceder a los resultados de una consulta SQL. En nuestro caso, "SELECT count(*) from usuarios;". Encontrarás una explicación más detallada en la sección de "Extracción de datos de la base de datos".

Envia esta página a un amigo

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_3.htm (2 of 2) [09/12/02 11:06:09 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

INSERCIÓN DE DATOS EN LA BASE DE DATOS PALABRA

PALABRA :

La parte más importante de este apartado es saber "qué campos tenemos o queremos insertar". Hay que tener en cuenta que aquellos campos que hayamos marcado como "not null" deberán ser incluidos siempre. Para insertar datos se sigue siempre el mismo procedimiento, una sentencia SQL del tipo: Submit Query

INSERT INTO tabla (campo1,campo2,campo3,…) VALUES ,valorcampo2 , valorcampo3, ….);

.

(valorcampo1

Tabla: será el nombre de la tabla donde queramos hacer la inserción de datos. Campo1,Campo2....: serán los nombres de los campos en los que insertaremos los registros. valorcampo1 ,valorcampo2...: serán los valores a insertar en los campos antes indicados (en el mismo orden). En nuestro ejemplo, si quisiéramos insertar un registro, podríamos utilizar: INSERT INTO usuarios (Nombre, Apellidos, Edad, DNI, Provincia) VALUES ("nombre", "apellidos usuario", 16, "99999999", "provincia"); Nota Importante: Las cadenas de texto o lo que se entiende por "VARCHAR" o "TEXT" deben de ir entre comillas. Los números no tienen porque ir entre comillas. Nota Importante 2: Como norma general debes respetar las mayúsculas y minúsculas en los nombres de los campos y tablas (con respecto al nombre de creación). MySQL no distingue entre mayúsculas y minúsculas, lo hace sólamente en los nombres de los campos, no en los nombres de las tablas. Es decir, "usuarios" es diferente a "Usuarios" por ser una tabla, pero "nombre" es igual a "NOMBRE" por ser un campo. Esto no ocurre en todas las bases de datos, por ejemplo, en PostGreSQL nunca distingue entre mayúsculas y minúsculas. Ejemplo: Como insertar datos desde un formulario. Supongamos el formulario: forminscribir.php: <FORM method="POST" action="insertar_41.php"> Nombre: <INPUT TYPE="text" name="Nombre"> Apellidos: <INPUT TYPE="text" name="Apellidos"> Edad: <INPUT TYPE="text" name="Edad"> DNI: <INPUT TYPE="text" name="DNI"> Provincia: <INPUT TYPE="text" name="Provincia"> <input type="submit"> </FORM> Y el código: insertar_41.php :

<HTML> <HEAD></HEAD> <BODY> <? if ($Nombre=="" || $Apellidos=="" || $Edad==""

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_4.htm (1 of 3) [09/12/02 11:06:25 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL || $DNI=="" || $Provincia=="") { echo "Error, debes rellenar todos los campos."; } else { $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es","password"); if ($idconnect==0) { echo "Lo sentimos no se ha podido "; echo "conectar con la base de datos."; } else { mysql_select_db("db_iwebmaster_es",$idconnect); $Peticion="INSERT INTO usuarios"; $Peticion.="(Nombre,Apellidos,Edad,DNI,Provincia)"; $Peticion.=" VALUES "; $Peticion.="(\"$Nombre\",\"$Apellidos\","; $Peticion.="$Edad,\"$DNI\",\"$Provincia\");"; $idresult=mysql_query ($Peticion, $idconnect); if ($idresult==0) { echo "La sentencia es incorrecta.<BR>"; echo mysql_errno().":".mysql_error()."<BR>"; } else { echo "El registro se ha insertado correctamente"; echo "en la base de datos."; } mysql_close($idconnect); } } ?> </BODY> </HTML> Ejecutar este ejemplo Aclaración 1: El primer if comprueba si los datos ó variables que pretendemos insertar "existen", es decir, si no están vacíos. Pero, ¿de dónde surgen las variables? Estas variables surgen del formulario que tenemos antes, donde en "action" se ha especificado "insert_41.php" y allí serán enviadas las variables. Pero, ¿qué variables? Cada <input type="XX" name="YY"> que has especificado en el formulario, aparecerá como una variable en php llamada $YY. Entonces, ¿puedo colocar el formulario en una página diferente a la de php? No sólo puedes, sino que deberías (ya que hará el código más legible). Lo único que tendrás que hacer es poner correctamente en "action" un enlace a tu página php. Aclaración 2: ¿Qué significa \"? Como para colocar una cadena de texto en una sentencia SQL es necesario encerrarla entre comillas, debemos utilizar \" para que no se confunda con el fin de cadena de la sentencia. Otra alternativa es usar comillas simples: '. Así, podemos tener: "INSERT INTO otratabla (campo1) VALUES ('valorcampo1');". Aclaración 3: ¿Se puede colocar una variable PHP dentro de una cadena , como: "$var "? Por supuesto. Por ejemplo: <? $var="hola"; $var2="$var,adios"; echo $var2;?> mostraría el resultado "hola, adios". Aclaración 4 (mysql_errno y mysql_error): Cuando mandamos una sentencia SQL al servidor, esta puede dar una respuesta correcta o una respuesta incorrecta. Estas sentencias nos dicen que nº de error se ha producido (mysql_errno) y el texto de error que el servidor MySQL ha respondido. En este caso pueden ocurrir varias cosas, que algún registro esté mal formateado (por ejemplo, que el e-mail no sea un número) o que ya haya otro registro con el DNI especificado. Ambos casos tendrán un número de error diferente y un mensaje de error diferente. Estos casos se pueden probar poniendo un DNI repetido y una edad no válida. La ventaja de esto es que, una vez conocidos los valores que retorna la base de datos, podemos tratarlas por separado (por ejemplo, sabemos que un DNI repetido provoca un error número

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_4.htm (2 of 3) [09/12/02 11:06:25 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL 1062). Es común hacer "SELECT" antes de hacer "INSERT" para comprobar si un registro existe, esto es, además de innecesario, ineficiente. La propia base de datos, si la hemos diseñado bien, nos puede informar si el registro ya existe.

Envia esta página a un amigo

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_4.htm (3 of 3) [09/12/02 11:06:25 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

EXTRACCIÓN DE DATOS PALABRA

Como puedes imaginar, hay una sentencia SQL para esta operación. Aunque es un tanto compleja, veremos una versión simplificada pero muy funcional de la misma: SELECT campos FROM tabla WHERE condiciones ORDER BY orden;

PALABRA :

Submit Query

Campos: es el conjunto de campos que queremos recuperar, como por ejemplo, "Nombre, Apellidos, ..." . Si quisiéramos especificar "todos los campos" deberíamos poner "*". Tabla: es la tabla de donde se desean extraer los datos.

. El resto de la sentencia puede ser opcional. Por ejemplo, podríamos extraer todos los campos de una tabla con la sentencias: SELECT * FROM usuarios; O bien, extraer sólo algunos campos con la sentencia: SELECT Nombre FROM usuarios; También podemos "operar" con los campos. Por ejemplo, podemos contar todos los registros de la siguiente forma: SELECT count(*) FROM usuarios; Y será equivalente a: SELECT count(Nombre) FROM usuarios; Cuidado con las operaciones, no se pueden hacer cosas como: SELECT count(Nombre),Apellidos FROM usuarios; Pues la base de datos no sabe como combinar el recuento de nombres con cada apellido. Esas son operaciones más complejas basadas en agrupaciones, para lo que es necesaria alguna experiencia. Otra cosa útil es seleccionar "el máximo" o la media, por ejemplo ¿Cuál sería la edad máxima de todos los registros? SELECT max(edad) FROM usuarios; Al igual que ocurre con count, no se puede combinar esta "función" con todo.

Condiciones: Las condiciones sirven para especificar restricciones en los resultados.

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_5.htm (1 of 4) [09/12/02 11:06:41 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

Por ejemplo, si quisiéramos seleccionar aquellos usuarios con 30 años: SELECT * FROM usuarios WHERE edad=30; Pero si quisieramos seleccionar aquellos con más de 30, sería: SELECT * FROM usuarios WHERE edad>30; Que será diferente a los que tengan 30 o más: SELECT * FROM usuarios WHERE edad>=30; Igualmente existe menor que "<" y menor o igual "<=" Otra situación que nos podemos plantear es, si queremos seleccionar con dos condiciones, por ejemplo, con más de 30 a��os y que se llamen pepe: SELECT * FROM usuarios WHERE Edad>30 AND Nombre="pepe"; O aquellos que tengan menos de 30 años o se llamen pepe: SELECT * FROM usuarios WHERE Edad<30 OR Nombre="pepe"; Tambien podríamos agrupar condiciones. Por ejemplo, aquellos entre 30 y 50 o que se llamen pepe. Esta operación se hace con paréntesis: SELECT * FROM usuarios WHERE (Edad>=30 AND OR Nombre="pepe";

Edad<=50)

order: Aquí puedes especificar el orden en el que deseas que tus resultados aparezcan.

Hay dos formas de indicar el orden: ascendente y descendente: SELECT edad From usuarios ORDER BY edad desc; SELECT edad From usuarios ORDER BY edad asc; La primera de estas formas es la descendente y la segunda, la ascendente. Por supuesto, se puede ordenar por más de un campo (primero ordena por el primer campo, y dentro de los que sean iguales para el primer campo, ordenará los del segundo): SELECT Edad, Nombre FROM usuarios ORDER BY Edad asc, Nombre desc; En este caso se ordenarían los resultados por edad ascendentemente, pero dentro de los que tuvieran la misma edad, se ordenarían por nombre de forma descendente

Ahora necesitamos saber, cómo combinar todo esto con php. La base es la misma: una sentencia que ya hemos visto: $result=mysql_query ("SELECT Nombre,Edad FROM usuarios;",$idconnect); Para recoger los resultados hay que tener en cuenta que lo que retorna la base de datos es una "tabla" con los datos que cumplen las condiciones que nosotros exigimos en nuestra sentencia SELECT:

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_5.htm (2 of 4) [09/12/02 11:06:41 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

0

0Nombre a

1

b

22

2 ...

c ...

24 ...

1 - Edad 14

Si quisiéramos recoger los datos de la primera fila tendríamos que recoger los datos de la fila 0 columna 0 y 1: $Nombre=mysql_result ($result,0,0); $Edad=mysql_result ($result,0,1); alternativamente: si sabemos cuál es el nombre del campo que estamos solicitando: $Nombre=mysql_result($result,0,"Nombre"); $Edad=mysql_result($result,0,"Edad"); Siguiendo esta regla podríamos recoger todas las filas, pero ¿cómo sabemos cuantos resultados hay? Con la sentencia mysql_numrows, que nos retorna el número de filas que se han obtenido. Por ejemplo: $result=mysql_query("SELECT Nombre,Edad FROM Usuarios;"); for ($i=0;$i<mysql_numrows($result);$i++) { $Nombre=mysql_result ($result,0,0); $Edad=mysql_result ($result,0,1); echo $Nombre."-".$Edad."<BR>"; } Ahora ya sabemos algunos conceptos básicos sobre la obtención de datos de una tabla, en una base de datos. Vamos a ver ahora, algunas cosas "útiles". Por ejemplo, ¿es posible hacer un bucle como el anterior pero extrayendo datos y contando simultáneamente? Este proceso será mas rápido y se hará de forma secuencial siempre: $result=mysql_query("SELECT Nombre,Edad FROM Usuarios;"); while ($fila=mysql_fetch_array($result)) { $Nombre=$fila[0]; $Edad=$fila[1]; echo $Nombre."-".$Edad."<BR>"; } o bien, $result=mysql_query("SELECT Nombre,Edad FROM Usuarios;"); while ($fila=mysql_fetch_array($result)) { $Nombre=$fila["Nombre"]; $Edad=$fila["Edad"]; echo $Nombre."-".$Edad."<BR>"; } La función mysql_fetch_array nos da como resultado un array tipo hash, en el que están los datos. En la primera invocación nos retorna la primera fila, en la segunda, la segunda fila y así sucesivamente. En el array que retorna para cada registro hay dos formas de acceder: por el nº de columna (1er ejemplo) o por nombre del campo (2º ejemplo). Podemos modificarlo según nuestras necesidades; por ejemplo, si sólo queremos utilizar resultados de la primera forma podemos utilizar la expresión: mysql_fetch_array($result,MYSQL_NUM) y si sólo queremos de la segunda forma: mysql_fetch_array($result,MYSQL_ASSOC)

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_5.htm (3 of 4) [09/12/02 11:06:41 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

por defecto, tiene la posibilidad de utilizar ambas. El ejemplo: En este ejemplo vamos a ver un listado de todos los usuarios que han metido sus datos, todos los datos menos el DNI, pues este se utilizará en la parte de Modificación y Borrado. <HTML> <HEAD></HEAD> <BODY> <? $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es","password"); if ($idconnect==0) { echo "Lo sentimos no se ha podido"; echo "conectar con la base de datos."; } else { mysql_select_db("db_iwebmaster_es",$idconnect); $idresult=mysql_query ("SELECT * from usuarios;",$idconnect); if ($idresult==0) echo "La sentencia es incorrecta."; else { echo "Hay ".mysql_numrows($idresult)." registros."; echo "<TABLE border=1><TR><TD>Nombre</TD>"; echo "<TD>Apellidos</TD>"; echo "<TD>Edad</TD>"; echo "<TD>Provincia</TD></TR>"; while ($registro=mysql_fetch_array($idresult)) { echo "<TR><TD>".$registro["Nombre"]."</TD>"; echo "<TD>".$registro["Apellidos"]."</TD>"; echo "<TD>".$registro["Edad"]."</TD>"; echo "<TD>".$registro["Provincia"]."</TD></TR>"; } echo "</TABLE>"; mysql_free_result ($idresult); } } mysql_close($idconnect); ?> </BODY> </HTML> Ejecutar este ejemplo

Envia esta página a un amigo

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_5.htm (4 of 4) [09/12/02 11:06:41 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

MODIFICACIÓN DE DATOS PALABRA

Conociendo la sentencia SELECT y la sentencia INSERT esta operación se entiende bien. Es una sentencia del estilo (en forma simplificada): UPDATE tabla SET campo1=valor1,campo2=valor2,... WHERE condiciones;

PALABRA :

Submit Query

.

Ten encuenta que "valor1,valor2,..." tendrán que ir entre comillas si el tipo del campo es una cadena de carácteres. La comprensión de esta sentencia es bastante sencilla, modifica los campos (campo1, campo2,...) en aquellos registros donde se cumplan las "condiciones". Por ejemplo, si quisiéramos modificar los registros de un determinado DNI: UPDATE usuarios SET Nombre="Pepe" WHERE DNI="9999999"; Fácil, verdad! Ahora vamos a complicarlo un poquito viendo algo que suele ser muy útil. Por ejemplo: si quisiéramos hacer un programa en el que conociendo la fecha de nacimiento del usuario incrementara la edad automáticamente (suponiendo que tenemos el campo fecha en la base de datos): UPDATE usuarios SET Edad=Edad+1 WHERE FechaCumpleanos="29/05/01"; Aunque no lo veamos ahora, también existe un tipo de datos llamado de tipo "fecha" llamado "date", pero en el caso anterior podemos suponer que FechaCumpleaños es una simple cadena. Lo que es importante, es la capacidad de realizar operaciones de este tipo; por ejemplo, un programador que desconociera esto, primero haría un SELECT de los registros, extraería los valores, y ejecutaría un UPDATE con el valor de la Edad incrementado a mano. El efecto es el mismo, pero no la eficacia. También se pueden dar otros resultados, como combinar diferentes campos casi de la forma que queramos: UPDATE tabla SET campo3=campo1+campo2 WHERE condiciones; UPDATE tabla SET campo3=campo1*campo2 WHERE condiciones; UPDATE tabla SET campo3=campo1/campo2 WHERE condiciones; ... Estas operaciones incluso se pueden aplicar en un select. Por ejemplo, una sentencia que nos da el precio con IVA de una tabla de productos: SELECT Nombre,Precio+Precio*0.16 FROM Productos; O bien: SELECT Nombre,Precio*1.16 FROM Productos; La forma de utilizar esto en PHP es relativamente sencilla y parecida a las de insert: $Peticion="UPDATE usuarios SET Nombre=\"$Nombre\"; $Peticion.="WHERE DNI=\"$DNI\";"; $idresult=mysql_query ($Peticion, $idconnect);

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_6.htm (1 of 3) [09/12/02 11:06:49 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL if ($idresult==0) echo "La sentencia es incorrecta."; else { echo "Se han modificado "; echo mysql_affected_rows($idresult); echo "registros"; } La sentencia mysql_affected_rows nos retorna el número de registros que han sido modificados (en este caso). Esta sentencia es válida cuando hacemos también un INSERT y un DELETE (ver 4.4) pero en estos casos retorna el número de registros insertados y el número de registros borrados. El Ejemplo: El ejemplo de este caso será un ejemplo que consta de 3 pasos: se pedirá que el usuario introduzca el DNI, luego se mostrará un formulario con sus datos para que pueda modificarlos y después se modificarán los mismos. PASO 1: Formulario formbuscar.htm para extraer los datos del registro a modificar. <FORM action="formmodif.php" method="post"> <b> DNI:</b> <input type="text" name="DNI"><br> <input type="submit" name="enviar"> </FORM> PASO 2: Búsqueda del registro con el DNI obtenido del paso 1. <? $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es","password"); if ($idconnect==0) { echo "Lo sentimos no se ha podido"; echo " conectar con la base de datos."; } else { mysql_select_db("db_iwebmaster_es",$idconnect); $Peticion="SELECT * from usuarios where DNI='$DNI';"; $idresult=mysql_query ($Peticion,$idconnect); if ($idresult==0) echo "La sentencia es incorrecta."; else { if ($c=mysql_numrows($idresult)>0) { $registro=mysql_fetch_array($idresult); } mysql_free_result ($idresult); } } mysql_close($idconnect); if ($c>0) : ?> Formulario de modificación, modifique los campos que desee oportunos y presione modificar. <br> <form name="form1" action="modificar.php" method="post"> <p>Nombre: <input type="text" name="Nombre" value="<? echo $registro["Nombre"] ?>"> <br> Apellidos: <input type="text" name="Apellidos" value="<? echo $registro["Apellidos"] ?>"> <br> Edad: <input type="text" name="Edad" value="<? echo $registro["Edad"] ?>"> <br> DNI: <input type="text" name="DNI" value="<? echo $registro["DNI"] ?>"> <br>

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_6.htm (2 of 3) [09/12/02 11:06:49 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL Provincia: <input type="text" name="Provincia" value="<? echo $registro["Provincia"] ?>"> <br><input type="hidden" name="oldDNI" value="<?echo $registro["DNI"] ?>"><br> <input type="submit" name="Submit" value="Modificar"> </p> </form> <? else : ?> No se ha encontrado el registro. <? endif; ?> PASO 3: Modificación de los datos del registro del paso anterior. <? $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es","password"); if ($idconnect==0) { echo "Lo sentimos no se ha podido"; echo "conectar con la base de datos."; } else { mysql_select_db("db_iwebmaster_es",$idconnect); $Peticion="UPDATE usuarios SET DNI='$DNI',"; $Peticion.="Provincia='$Provincia',"; $Peticion.="Nombre='$Nombre',Apellidos='$Apellidos',"; $Peticion.="Edad=$Edad WHERE DNI='$oldDNI'"; $idresult=mysql_query ($Peticion,$idconnect); if ($idresult==0) { echo "La sentencia no se ha podido ejecutar.<BR>"; echo mysql_errno().":".mysql_error()."<BR>"; } else { $r=mysql_affected_rows($idconnect); echo "Se han modificado : $r registros <BR>"; if ($r==0) echo "No hay ningun registro con DNI=$oldDNI."; } mysql_close($idconnect); } ?> Ejecutar este ejemplo

Envia esta página a un amigo

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_6.htm (3 of 3) [09/12/02 11:06:49 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL

ELIMINACIÓN DE DATOS PALABRA

Esta parte es también bastante fácil, sobre todo habiendo visto la sentencia SELECT ya que el formato de las condiciones son iguales: DELETE FROM tabla WHERE condiciones;

PALABRA :

Submit Query

Si deseamos eliminar los registros que tengan menos de 15 años: DELETE FROM usuarios WHERE Edad<15;

.

Fácil verdad! En php es parecido al código típico: $Peticion="DELETE FROM usuarios WHERE DNI=\"$DNI\;"; $idresult=mysql_query ($Peticion, $idconnect); if ($idresult==0) echo "La sentencia es incorrecta."; else { echo "Se han eliminado "; echo mysql_affected_rows($idresult); echo " registros."; } El Ejemplo: Código HTML formulario para recoger el DNI, formeliminar.php: <FORM action="eliminar.php" method="post"> <b> DNI:</b> <input type="text" name="DNI"> <br> <input type="submit" value="Eliminar" name="submit"> </FORM> Código PHP que realiza la eliminación del DNI insertado en el paso anterior DNI, eliminar.php: <? $idconnect=mysql_connect("mysql1.opsion.fr", "db_iwebmaster_es", "Password"); if ($idconnect==0) echo "Lo sentimos no se ha podido"; echo " conectar con la base de datos."; else { mysql_select_db("db_iwebmaster_es",$idconnect); $Peticion="DELETE FROM usuarios WHERE DNI='$DNI'"; $idresult=mysql_query ($Peticion,$idconnect); if ($idresult==0) { echo "La sentencia no se ha podido ejecutar.<BR>"; echo mysql_errno().":".mysql_error()."<BR>"; }

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_7.htm (1 of 2) [09/12/02 11:06:56 p.m.]


i (españa) - BIENVENIDOS AL ESPACIO WEBMASTER :: CURSO DE PHP / MYSQL else { $r=mysql_affected_rows($idconnect); echo "Se han eliminado : $r registros <BR>"; if ($r==0) echo "No hay ningun registro con DNI=$oldDNI."; } mysql_close($idconnect); } ?>

Ejecutar este ejemplo

Envia esta página a un amigo

Bélgica | Francia | Italia | Suiza | Quebec Contacto : técnico | negocios | prensa | pub Copyright i (españa) - una sociedad de

file:///D|/Archivos%20bajados/manuales/php_mysql%20manual/curso_7.htm (2 of 2) [09/12/02 11:06:56 p.m.]


Prueba