Vous êtes sur la page 1sur 15

Miguel ngel Crdova Sols 26/01/2011

CONSULTA A BASES DE DATOS MYSQL DESDE APLICACIONES PHP:


FUNCIONES:
MYSQL_SELECT_DB Selecciona una base de datos MySQL int mysql_select_db ( cadena base_de_datos [, int identificador_de_enlace] ) Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo. MYSQL_QUERY Enva una sentencia SQL a MySQL int mysql_query ( string sentencia [, int identificador_de_enlace]) Devuelve TRUE (no-cero) o FALSE para indicar si la sentencia se ha ejecutado correctamente o no. Un valor TRUE significa que la sentencia era correcta y pudo ser ejecutada en el servidor. MYSQL_NUM_ROWS Devuelve el nmero de filas de un resultado int mysql_num_rows ( int id_resultado ) Regresa el nmero de filas en un resultado. Este comando es vlido solo para las sentencias SELECT. Para obtener el nmero de filas afectadas por las sentencias INSERT, UPDATE o DELETE, use mysql_affected_rows(). MYSQL_RESULT Devuelve datos de un resultado int mysql_result ( int id_resultado, int numero_de_fila [, mixed campo]) Devuelve el contenido de una celda de un resultado MySQL. El campo argumento puede ser el nombre del campo o el offset o tabla.nombre_del_campo. Si el nombre de la columna tiene un alias ('select foo as bar from...'), utilice el alias en lugar del nombre de la columna. MYSQL_FETCH_ROW Devuelve una fila de resultado como matriz array mysql_fetch_row ( int id_resultado ) Devuelve: Una matriz que corresponde a la fila seleccionada, o FALSE si no quedan ms filas. Selecciona una fila de datos del resultado asociado al identificador de resultado especificado. La fila es devuelta como una matriz. Cada columna del resultado es guardada en un offset de la matriz, empezando por el offset 0. MYSQL_DATA_SEEK Mueve el puntero interno int mysql_data_seek ( int id_resultado, int numero_de_fila ) Mueve el puntero de fila interno a la fila especficada para el identificador de resultado. La prxima llamada a mysql_fetch_row() devolver esa fila. Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo. El nmero de fila inicia con cero. MYSQL_FETCH_ASSOC Recupera una fila de resultado como una matriz asociativa mysql_fetch_assoc ( resource resultado ) Devuelve una matriz asociativa que corresponde a la fila recuperada y mueve el apuntador de datos interno hacia adelante. mysql_fetch_assoc() es equivalente a llamar mysql_fetch_array() con MYSQL_ASSOC como el segundo parmetro opcional. nicamente devuelve una matriz asociativa.

MYSQL_ERRNO Devuelve el nmero del mensaje de error de la ltima operacin MySQL int mysql_errno ( [int identificador_de_enlace] ) Regresa el nmero de error de la ltima funcin, o 0 (cero) si no hay error. Los errores que se obtienen de la base de datos MySQL ya no generan alertas. En lugar de eso, use mysql_errno() para obtener el cdigo de error. Note que esta funcin solo regresa el cdigo de error de la funcin MySQL ms recientemente executada (sin incluir mysql_error() y mysql_errno()), as que si quiere usarla, asegrese de chequear el valor antes de llamar a otra funcin de MySQL. MYSQL_ERROR Devuelve el texto con error del mensaje de la anterior operacin MySQL cadena mysql_error ( [int identificador_de_enlace] ) Regresa el texto del error de la ltima funcin MySQL o (cadena vaca) si no ocurri error. Si no se especfica el identificador de enlace en la funcin se usa el ltimo enlace abierto exitosamente para obtener el mensaje de error del servidor MySQL. OPERACIONES TRANSACCIONES:

Es importante saber que las transacciones son soportadas solo para las tablas tipo innodb
Iniciar transaccin: BEGIN, BEGIN WORK, START TRANSACTION mysql_query(BEGIN, $cn); Confirmar transaccin: mysql_query(COMMIT, $cn); Cancelar transaccin: mysql_query(ROLLBACK, $cn);

LIBRERIA.PHP Para facilitar la programacin, utilizaremos una librera de funciones <?php function fnConnect( &$msg){ $cn=mysql_connect("localhost","root",""); if(!$cn){ $msg = "Error en la conexin"; return 0; } $rpta = mysql_select_db("rh",$cn); if(!$rpta){ $msg = "BD no existe"; mysql_close($cn); return 0; } return $cn; } function say($cad){ echo $cad . "\n"; } function fnShowMsg($title,$msg){ say("<table width='250'>"); say("<tr>"); say("<th align=center valign=middle>$title</th>"); say("</tr>"); say("<tr>"); say("<td align=left valign=middle>".$msg."</td>"); say("</tr>"); say("</table>");

} function fnLink($link,$target,$mouseover,$msg){ $cad = "<A href='$link' target='$target' "; $cad .= "onmouseout=\"self.status='';return true\" "; $cad .= "onmouseover=\"self.status='$mouseover' ;return true\">"; $cad .= "$msg</A>"; return $cad; } ?> ESTILO.CSS Define el estilo de las pginas web que mostrarn los resultados. body { color: #000099; font-family:Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; font-weight: 500; background: #FFF8EC; } H1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 2em; font-weight: 700; } { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.75em; font-weight: 700; }

H2

H3

{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.58em; font-weight: 500; } TABLE { background-color: #FFEFD5; } TH { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.9em; color: White; font-weight: 500; font: bold; background: #804D19; } TD { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.9em; font-weight: 500; color: Navy; }

CONSULTA1.PHP Solicite ingreso del cdigo de un empleado y muestre los resultados de cdigo, apellido y nombre.

CONSULTA1.PHP <?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1>Consulta de un Empleado</h1> <form method="POST" action="consulta1.php"> Cdigo <input type="text" name="codigo"> <input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: codigo if( !isset($_POST["codigo"]) ) { say( "</body>" ); return; } // leer la variable: codigo $codigo = $_POST["codigo"]; // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } // Realizar consulta a la base de datos $sql = "select * from empleado "; $sql .= "where idempleado='$codigo'"; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Cdigo " . $codigo . " no existe."; fnShowMsg( "Mensaje", $msg ); say( "</body>" ); return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "<table border=1>" ); say( "<tr>" ); say( "<td>Cdigo</td>" );

say( "<td>" . mysql_result($rs,0,"idempleado") . "</td>" ); say( "</tr>" ); say( "<tr>" ); say( "<td>Apellido</td>" ); say( "<td>" . mysql_result($rs,0,"apellido") . "</td>" ); say( "</tr>" ); say( "<tr>" ); say( "<td>Nombre</td>" ); say( "<td>" . mysql_result($rs,0,"nombre") . "</td>" ); say( "</tr>" ); say( "</table>" ); ?> </body> CONSULTA2.PHP Consulta que muestre el registro de empleados por departamento, la cual debe ser seleccionado desde una lista desplegable.

<?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } ?> <h1>Consulta de Empleados</h1> <form method="POST" action="consulta2.php"> Departamento <select name="dept" size="1"> <?php $sql = "select iddepartamento, nombre from departamento"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_row( $rs ) ) { $op = "<option value='" . $row[0] . "'>"; $op .= $row[1] . "</option>"; say( $op ); } ?> </select>

<input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: dept if( !isset($_POST["dept"]) ) { say( "</body>" ); return; } // leer la variable: dept $dept = $_POST["dept"]; // Leer el nombre del departamento $sql = "Select nombre from departamento "; $sql .= "where iddepartamento = $dept"; $rs = mysql_query( $sql, $cn ); $nom = mysql_result( $rs, 0, 0 ); // Consultar los empleados del departamento $sql = "select idempleado, apellido, nombre, sueldo from empleado "; $sql .= "where iddepartamento=$dept"; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Departamento $dept - $nom no tiene empleados."; fnShowMsg( "Mensaje", $msg ); say( "</body>" ); return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "Departamento: $dept - $nom" ); say( "<table border=1>" ); say( "<tr>" ); say( "<th>Cdigo</th>" ); say( "<th>Apellido</th>" ); say( "<th>Nombre</th>" ); say( "<th>Sueldo</th>" ); say( "</tr>" ); while( $row = mysql_fetch_row( $rs ) ) { say( "<tr>" ); foreach ( $row as $celda) { if( is_null( $celda ) ) { $celda = "None"; } say( "<td>$celda</td>" ); } say( "</tr>" ); } say( "</table>" ); ?> </body>

CONSULTA3.PHP Consulta del nmero de empleados por cargo, la cual debe ser seleccionado desde una lista desplegable.

<?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } ?> <h1>Consulta de Empleados</h1> <form method="POST" action="consulta3.php"> Cargo <select name="cargo" size="1"> <?php $sql = "select idcargo, nombre from cargo"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_assoc( $rs ) ) { $op = "<option value='" . $row["idcargo"] . "'>"; $op .= $row["nombre"] . "</option>"; say( $op ); } ?> </select> <input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: cargo if( !isset($_POST["cargo"]) ) { say( "</body>" ); return; } // leer la variable: cargo $cargo = $_POST["cargo"]; // Leer el nombre del puesto de trabajo $sql = "Select nombre from cargo where idcargo = '$cargo'"; $rs = mysql_query( $sql, $cn ); $nom = mysql_result( $rs, 0, 0 ); // Consultar los empleados del departamento $sql = "select iddepartamento as dept, count(*) as emps "; $sql .= "from empleado ";

$sql .= "where idcargo = '$cargo' "; $sql .= "group by iddepartamento "; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Cargo $cargo - $nom no tiene empleados."; fnShowMsg( "Mensaje", $msg ); say( "</body>" ); return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "Cargo: $cargo - $nom" ); say( "<table border=1 width=300>" ); say( "<tr>" ); say( "<th>Departamento</th>" ); say( "<th>Empleados</th>" ); say( "</tr>" ); while( $row = mysql_fetch_assoc( $rs ) ) { say( "<tr>" ); say( "<td align='center'>" . $row["dept"] . "</td>" ); say( "<td align='center'>" . $row["emps"] . "</td>" ); say( "</tr>" ); } say( "</table>" ); ?> </body>

CONSULTA4.PHP Pgina que muestre los resultados en una pgina pero de 5 registros, los diversos resultados deber paginarse.

<?php require( "libreria.php" ); ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1>Paginacin</h1> <h2>Listado de Empleados</h2> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return;

} // Parmetros de Paginacin $pagesize = 5; $pageno = 1; if( isset($_GET["pageno"]) ) { $pageno = $_GET["pageno"]; } // Paginacin $dezp = ($pageno - 1) * $pagesize; $sql = "select count(*) from empleado "; $rs = mysql_query( $sql, $cn ); $rows = mysql_result( $rs, 0, 0 ); $pages = ceil( $rows / $pagesize ); say( "Pginas: " ); for( $i = 1; $i <= $pages; $i++ ) { if($i != $pageno) { $link = "<a href='consulta4.php?pageno=$i'>$i</a>"; } else { $link = $i; } say( $link . " " ); } // Listado $sql = "select idempleado, apellido, nombre, email "; $sql .= "from empleado limit $dezp, $pagesize"; $rs = mysql_query( $sql, $cn ); say( "<table border='1'>" ); say( "<tr>" ); say( "<th>Cdigo</th>" ); say( "<th>Apellido</th>" ); say( "<th>Nombre</th>" ); say( "<th>Email</th>" ); say( "</tr>" ); while( $rec = mysql_fetch_row($rs) ) { say( "<tr>" ); foreach ( $rec as $field ){ say( "<td>$field</td>" ); } say( "</tr>" ); } ?> </body>

CONSULTA5.PHP Consulta que muestra cmo controlar errores, para eso muestra un formulario para el ingreso de los parmetros necesarios para realizar una conexin, luego intenta realizar una nueva conexin, de haber un error muestra el nmero de error y el mensaje respectivo.

En caso se ingrese correctamente:

En caso se ingrese incorrectamente:

<link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1> Probar Conexin </h1> <?php if( !$_POST["seguro"] ) { ?> <form method="POST" action="consulta5.php"> <table width="300" border='1'> <tr> <td>Servidor</td> <td> <input type="text" name="server"> </td> </tr> <tr> <td>Usuario</td> <td> <input type="text" name="user"> </td> </tr> <tr> <td>Contrasea</td> <td> <input type="password" name="pass"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="hidden" name="seguro" value="12345"> <input type="reset" value="Limpiar"> <input type="submit" value="Enviar"> </td> </tr> </table> </form> <?php } else { // Captura de Datos $server = $_POST["server"]; $user = $_POST["user"]; $pass = $_POST["pass"]; // Probando conexin $cn = mysql_connect( $server, $user, $pass ); $errno = mysql_errno(); if( $errno == 0 ) { echo "Conexin Ok <br>"; } else {

echo "Nro. de Error: $errno <br>"; echo "Mensaje: " . mysql_error() . "<br>"; } echo "<br><a href='consulta5.php'>Nueva Prueba</a>"; } ?> </body>

CONSULTA6.PHP Consulta que muestra cmo controlar errores, para eso muestra un formulario para el ingreso de los parmetros necesarios para realizar una conexin, luego intenta realizar una nueva conexin, de haber un error muestra el nmero de error y el mensaje respectivo.

<?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } say( "<h1>Nuevo Empleado</h1>" ); if( !$_POST["seguro"] ) { // ****************************** // Formulario de Ingreso de Datos // ****************************** ?> <form method="POST" action="consulta6.php"> <table width="300" border='1'>

<tr> <td> Apellido </td> <td> <input type="text" name="apellido"> </td> </tr> <tr> <td> Nombre </td> <td> <input type="text" name="nombre"> </td> </tr> <tr> <td> Email </td> <td> <input type="text" name="email"> </td> </tr> <tr> <td> Telfono </td> <td> <input type="text" name="telefono"> </td> </tr> <tr> <td> Departamento </td> <td> <select name="dept" size="1"> <?php $sql = "select iddepartamento, nombre from departamento "; $sql .= "where iddepartamento in "; $sql .= "(select distinct iddepartamento from empleado)"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_row( $rs ) ) { $op = "<option value='" . $row[0] . "'>" . $row[1] . "</option>"; say( $op ); } ?> </select> </td> </tr> <tr> <td> Cargo </td> <td> <select name="cargo" size="1"> <?php $sql = "select idcargo, nombre from cargo "; $sql .= "where idcargo not in ('C01', 'C02')"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_assoc( $rs ) ) { $op = "<option value='" . $row["idcargo"] . "'>"; $op .= $row["nombre"] . "</option>"; say( $op ); } ?> </select> </td> </tr> <tr> <td> Sueldo </td> <td> <input type="text" name="sueldo"> </td> </tr> <tr> <td> Comisin </td> <td> <input type="text" name="comision"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="hidden" name="seguro" value="12345"> <input type="reset" value="Limpiar">

<input type="submit" value="Enviar"> </td> </table> </form> <?php } else { // ******************* // Procesar Formulario // ******************* // Captura de Datos $ape = $_POST["apellido"]; $nom = $_POST["nombre"]; $email = $_POST["email"]; $tel = $_POST["telefono"]; $cargo = $_POST["cargo"]; $dept = $_POST["dept"]; $sueldo = $_POST["sueldo"]; $comm = $_POST["comision"]; // Inicio de Transaccion mysql_query( "begin", $cn ); // Generar Codigo $sql = "select valor from control "; $sql .= "where parametro = 'Empleado'"; $rs = mysql_query( $sql, $cn ); $cont = mysql_result( $rs, 0, 0 ); $sql = "update control set valor = valor + 1 "; $sql .= "where parametro = 'Empleado'"; $rpta = mysql_query( $sql, $cn ); if( !rpta ) { mysql_query( "rollback", $cn ); fnShowMsg( "Error", "No se puede generar el su cdigo." ); say( "</body>" ); return; } $codigo = "0000" . $cont ; $codigo = "E" . substr( $codigo, strlen($codigo) - 4 ); // Determinar el codigo del jefe $sql = "select idempleado from empleado "; $sql .= "where iddepartamento = '$dept' "; $sql .= "and idcargo in ( 'C01', 'C02' ) "; $rs = mysql_query( $sql, $cn ); $rows = mysql_num_rows( $rs ); if( $rows != 1 ) { mysql_query( "rollback", $cn ); fnShowMsg( "Error", "No se pudo determinar el Jefe." ); say( "</body>" ); return; } $jefe = mysql_result( $rs, 0, 0 ); // Registrar el Empleado $sql = "insert into empleado(idempleado, apellido, nombre,"; $sql .= "fecingreso, email, telefono, idcargo, iddepartamento,"; $sql .= "sueldo, comision, jefe ) values ( '$codigo', '$ape', "; $sql .= "'$nom', curdate(), '$email', '$tel', '$cargo', $dept, "; $sql .="$sueldo, $comm, '$jefe')"; $rpta = mysql_query( $sql, $cn ); if(!$rpta){ mysql_query( "rollback", $cn ); $msg = "Datos ingresados no son correctos.<br>"; $msg .= "SQL: $sql"; fnShowMsg( "Error", $msg ); say( "</body>" );

return; } mysql_query( "commit", $cn ); $msg = "Empleado registrado correctamente.<br>"; $msg .= "Cdigo Generado: $codigo<br>"; fnShowMsg( "Mensaje", $msg ); say( fnLink( "ejm1509.php","","Nuevo Empleado", "Nuevo Empleado" ) ); } ?> </body>

ACTIVIDAD
Realizar cinco formularios web PHP+MySQL adicionales.

Vous aimerez peut-être aussi