Notas y ejercicios mysqli.
Transcripción
Notas y ejercicios mysqli.
Técnicas para la enseñanza de Desarrollo Web P H P - m ysqli Liliana Gutiérrez Flores Enero de 2016 Ejercicios: 1. Vamos a crear una base de datos de clientes, la base tiene dos tablas una de clientes y la otra de transferencias. El diagrama E/R se muestra a continuación. Utilice los comandos a continuación para la creación de la base de datos. mysql> create database db_banco; Query OK, 1 row affected (0.04 sec) mysql> use db_banco; Database changed mysql> mysql> set storage_engine=innodb; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> create table cliente -> (no integer primary key, -> nombre varchar(40), -> saldo double); Query OK, 0 rows affected (1.09 sec) mysql> describe cliente; mysql> create table transferencia -> (c1 integer references cliente(no), -> c2 integer references cliente(no), -> importe double); Query OK, 0 rows affected (0.44 sec) mysql> describe transferencia; 2. Inserte algunas tuplas a sus tablas. 3. La clase mysqli representa una conexión entre PHP y una base de datos MySQL. Revise la clase m ysqli en http://php.net/manual/es/class.mysqli.php. 4. En un archivo llamado con ecta_ m ysqli.php coloque el siguiente código. Tenemos la definición de 4 variables de conexión. Instanciamos la clase mysqli para obtener una conexión a la base de datos y verificamos el resultado de la conexión en connect_errno. Pruebe su script de conexión. <?php //..VARIABLES $servidor="127.0.0.1"; $usuario="root"; $password=""; $DB="tbnaucalpan"; //..CONECTANDOSE A MySQL $conectado = new mysqli($servidor, $usuario, $password, $DB); if ($conectado->connect_errno){ echo("PROBLEMAS CON LA DB, CONTACTE A SU ADMINISTRADOR");} ?> 5. En otro documento llamado form aB anco_ m ysqli.php agregue tres formularios, uno para insertar un cliente, otro para consultar y finalmente uno más para realizar una transferencia. Se propone el código a continuación. <html><head></head><body> <form name="f1" id="f1" action="insertaCli_mysqli.php" method="post"> Id: <input type="text" name="numero" id="numero"><br> Nombre: <input type="text" name="nombre" id="nombre"><br> Saldo: <input type="text" name="saldo" id="saldo"><br><br> <input type="submit" value="ALTA CLIENTE" name="ok" id="ok"> </form> <form name="f2" id="f2" action="listaCli_mysqli.php" method="post"> <input type="submit" value="LISTAR CLIENTES" name="ok" id="ok"> </form> <form name="f3" id="f3" action="transfiere_mysqli.php" method="post"> Cliente 1: <input type="text" name="cli1" id="cli1"><br> Cliente 2: <input type="text" name="cli2" id="cli2"><br> Importe: <input type="text" name="importe" id="importe"><br><br> <input type="submit" value="TRANSFIERE" name="ok" id="ok"> </form> </body></html> 6. El archivo insertaC li_ m ysqli.php deberá utilizar el método query de la clase mysqli para eviar la consulta a la base de datos. El código se propone a continuación. <html> <head><title></title> </head> <body> <?php include 'conecta_mysqli.php'; $insertar="INSERT INTO cliente VALUES (".$_POST['numero'].", '".$_POST['nombre']."', ".$_POST['saldo'].");"; echo("comando sql = ".$insertar."<br>"); $alta=$conectado->query($insertar); if (!$alta){ echo("No se ha insertado");} else echo("insertado"); ?> <br><br> </body> </html> 8. Descargue el archivo listaC li_ m ysqli.php, revise su código. La respueta de query a una consulta tipo SELECT es un objeto de la clase mysqli_result, revise la referencia en http://php.net/manual/es/class.mysqli-result.php. Note que para recuperar los datos se utilizan los métodos data_seek() y fetch_assoc() de la clase mysqli_result. Pruebe la funcionalidad del segundo formulario. 9. La transferencia es una transacción a la base de datos que involucra más de una operación a la base de datos. Pruebe los siguientes comandos para hacer una transferencia en línea de comandos. start transaction; insert into transferencia values (1,2,200); select @s:=saldo from cliente where no=1; update cliente set saldo=@s-200 where no=1; select @s:=saldo from cliente where no=2; update cliente set saldo=@s+200 where no=2; commit; 10. Diseñe un procedimiento almacenado para que realice la transacción a la base de datos. Utilice lo siguiente en la línea de comandos. drop procedure if exists transfiereC1C2; delimiter // create procedure transfiereC1C2 (in c1 int, in c2 int, in c double) begin declare s1 int; #saldo inicial declare s2 int; #saldo final start transaction; insert into transferencia values(c1, c2, c); select saldo into s1 from cliente where no=c1 limit 1; set s2=s1-c; if s2>=0 then update cliente set saldo=s2 where no=c1; select saldo into s1 from cliente where no=c2 limit 1; set s2=s1+c; update cliente set saldo=s2 where no=c2; commit; else rollback; end if; end // delimiter ; 11. Pruebe su procedimiento con call transfiereC1C2(1,1,100); en la línea de comandos. 12. Descargue el archivo transfiere_mysqli.php, revise el código a continuación. Note que ahora la consulta a la base de datos es precisamente la llamada al procedimiento almacenado. Pruebe su tercer formulario y valide sus resultados tanto es línea de comandos como en el navegador. <html> <head><title></title> </head> <body> <?php include 'conecta_mysqli.php'; $conectado->autocommit(false); $transferir="call transfiereC1C2(".$_POST['cli1'].", ".$_POST['cli2'].", ".$_POST['importe'].");"; echo("comando sql = ".$transferir."<br>"); $transferencia=$conectado->query($transferir); if (!$transferencia){ echo("No se ha realizado la transferencia");} else echo("Transferencia ok"); $conectado->commit(); ?> <br><br> </body> </html> Referencias: http://php.net/manual/es/book.mysqli.php Extensión MySQL mejorada. http://php.net/manual/es/class.mysqli.php