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: &nbsp; <input type="text" name="numero"
id="numero"><br>
Nombre: &nbsp; <input type="text" name="nombre"
id="nombre"><br>
Saldo: &nbsp; <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: &nbsp; <input type="text" name="cli1"
id="cli1"><br>
Cliente 2: &nbsp; <input type="text" name="cli2"
id="cli2"><br>
Importe: &nbsp; <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

Documentos relacionados