Professional Documents
Culture Documents
Bases de Datos - Mysqli
Bases de Datos - Mysqli
Material para
a formacin profesional inicial
Familia profesional
IFC
Informtica e comunicacins
Ciclo formativo
CSIFC03
Grao
Superior
Mdulo profesional
MP0613
Unidade didctica
UD6
Actividade
A01
Autores
Nome do arquivo
CSIFC01_ MP0613_UD06_A01_BD
Pxina 1 de 36
Pxina 2 de 36
ndice
1.Ficha tcnica....................................................................................................................5
Contexto da actividade..........................................................................................................................5
Ttulo da actividade...............................................................................................................................5
Resultados de aprendizaxe do currculo................................................................................................5
Obxectivos didcticos e ttulo e descricin da actividade......................................................................5
Criterios de avaliacin...........................................................................................................................6
Contidos................................................................................................................................................6
Actividades de ensino e aprendizaxe e de avaliacin, mtodos, recursos e instrumentos de avaliacin
.................................................................................................................................................................7
A extensin mysqli.................................................................................................................................9
Configuracin de MySQLi...............................................................................................................................9
Conexin base de datos............................................................................................................................10
Erros.............................................................................................................................................................11
Execucin de consultas................................................................................................................................11
Transaccins................................................................................................................................................15
Consultas preparadas..................................................................................................................................16
Tarefas..................................................................................................................................19
1.2.1Tarefa 1. Creacin e conexin a base de datos de traballo.................................................................................20
Autoavaliacin.....................................................................................................................................20
1.2.2Tarefa 2. Realizacin de consultas de accin......................................................................................................22
Autoavaliacin.....................................................................................................................................23
1.2.3Tarefa 3. Realizacin de consultas de seleccin.................................................................................................24
Autoavaliacin.....................................................................................................................................24
1.2.4Tarefa 4. Realizacin de operacins que implican transaccins.........................................................................27
Autoavaliacin.....................................................................................................................................27
1.2.5Tarefa 5. Realizacin de operacins con consultas preparadas..........................................................................28
Autoavaliacin.....................................................................................................................................28
3.Avaliacin......................................................................................................................31
Exemplo de exercizo a realizar na proba prctica a realizar ao rematar a U.D...................................31
Autoavaliacin.....................................................................................................................................33
Pxina 3 de 36
Pxina 4 de 36
1.
Ficha tcnica
Contexto da actividade
Mdulo
Durac
in
Unidade didctica.
Sesi
ns 50
Actividades
Sesi
ns 50
175
24
14
10
Ttulo da actividade
N
Ttulo
Descricin
Duracin
A01
14
Completo
RA6. Desenvolve aplicacins de acceso a almacns de datos, aplicando medidas para manter a seguridade e a integridade
da informacin
Non
Actividade
O1.1
O1.2
O1.3
Recuperar informacin
dunha
Pxina 5 de 36
Descricin bsica
Duracin
14
O1.5
Criterios de avaliacin
Criterios de avaliacin
CA6.1 - Analizronse as tecnoloxas que permitan o acceso mediante programacin informacin dispoible en almacns de datos.
CA6.2.1 - Creronse aplicacins que establezan conexins con bases de datos empregando mysqli
CA6.3.1 - Recuperouse informacin almacenada en bases de datos empregando mysqli
CA6.4 - Publicouse en aplicacins web a informacin recuperada.
CA6.5 - Utilizronse conxuntos de datos para almacenar a informacin.
CA6.6.1 - Creronse aplicacins web que permitan a actualizacin e a eliminacin de informacin dispoible nunha base de datos empregando
mysqli
CA6.7.1 - Utilizronse transaccins para manter a consistencia da informacin empregando mysqli
CA6.8 - Probronse e documentronse as aplicacins.
CA6.9 - Identificouse a necesidade do uso de consultas preparadas
Contidos
Contidos
Establecemento de conexins con bases de datos relacionais.
APIs de PHP para acceder s bases de datos de MySQL
A extensin mysqli
Configuracin de mysqli
Conexin base de datos
Erros
Recuperacin e edicin de informacin.
Visualizacin da informacin en pxinas web.
Uso de conxuntos de resultados.
Mecanismos de edicin da informacin nun cliente web.
Execucin de sentenzas SQL.
Transaccins.
Consultas preparadas
Pxina 6 de 36
Cmo
Profesorado
(en termos de tarefas)
Tp1.1 Explicacin por parte do profesor das
distintas APIs de PHP para conectarse as
bases de datos, e en particular a extensin
mysqli..
Tp1.2 Explicacin por parte do profesor de
cmo realizar conexins a bases de datos
MySQL empregando a extensin mysqli.
Tp1.3 Explicacin sobre como realizar
consultas que non devolven valores
empregando a extensin mysqli (tanto de
xeito procedemental como empregando o
estilo orientado a obxectos).
Tp1.4 Explicacin sobre como realizar
consultas que devolven valores empregando
a extensin mysqli (tanto de xeito
procedemental como empregando o estilo
orientado a obxectos).
Tp1.5 Explicacin por parte do profesor de
cando convinte empregar transaccins e
cmo levalas a cabo empregando a
extensin mysqli.
Tp1.6 Explicacin por parte do profesor das
vantaxes do uso das consultas preparadas
empregando a extensin mysqli.
Alumnado
(tarefas)
Ta1.1. Creacin da base de datos coa que
imos traballar nesta actividade e
establecemento dunha conexin con esta
empregando a extensin mysqli.
Ta1.2 . Realizacin de consultas de accin
empregando a extensin mysqli.
Ta1.3 . Realizacin de consultas que
devolven valores empregando a extensin
mysqli.
Ta1.4 . Realizacin de operacins que
implican o uso de transaccins empregando
a extensin mysqli.
Ta1.5 . Realizacin de operacins
empregando consultas preparadas.
Ta1.6 . Realizacin dunha proba prctica
relativa ao explicado nesta actividade.
Resultados
ou produtos
Base de datos creada en
mysqli
Scripts coas solucins as
tarefas
Scripts coa solucin
proba prctica
Con qu
Cmo e con qu se
valora
Recursos
Instrumentos e
procedementos de
avaliacin
Duracin
(sesins)
14
2.
1.1
Introducin
Esta actividade ten como obxectivos:
Identificar as tecnoloxas que permiten o acceso mediante programacin informacin
dispoible en almacns de datos.
Crear aplicacins que establezan conexins con bases de datos.
Recuperar informacin dunha base de datos e visualizala nunha pxina web.
Crear aplicacins web que permitan a actualizacin e a eliminacin de informacin
dispoible nunha base de datos.
Usar transaccins para manter a consistencia da informacin.
1.2
Actividade
Acceso a base de datos
Existen varias opcins dispoibles para conectarse a un servidor MySQL dende unha
aplicacin en PHP. PHP ofrece 3 APIs diferentes ellas son mysql, mysqli, y PDO.
Pxina 8 de 36
No ficheiro php.ini hai unha seccin especfica para as opcins de configuracin propias de
cada extensin. Entre as opcins que se poden configurar para a extensin MySQLi estn:
mysqli.allow_persistent:
se perda a conexin.
mysqli.default_host:
base de datos.
mysqli.default_user:
de base de datos.
Pxina 9 de 36
Para poder acceder aos datos dunha base de datos, previamente temos que establecer unha
conexin co servidor MySQL.
Con MySQLi, existen dous xeitos de establecer unha conexin co servidor:
Crear unha instancia da clase mysqli. O construtor da clase pode recibir seis parmetros,
todos opcionais, anda que o mis habitual utilizar os catro primeiros:
o o nome ou direccin IP do servidor MySQL ao que che queres conectar.
o un nome de usuario con permisos para establecer a conexin.
o o contrasinal do usuario.
o o nome da base de datos que conectarse.
o o nmero do porto en que se executa o servidor MySQL.
o o socket ou a canalizacin con nome (named pipe) a usar.
$db = new mysqli('localhost', 'usuario', 'contrasinal', 'base_datos');
FUNCIN
connect_errno
mysqli_connect_errno( )
connect_error
mysqli_connect_error( )
Por exemplo, o seguinte cdigo comproba o establecemento dunha conexin coa base de
datos "Empresa" e finaliza a execucin se se produce algn erro:
Pxina 10 de 36
Para pechar a conexin a base de datos podemos emplear a funcin mysqli_close como se
amosa a continuacin:
mysqli_close($db);
Na tarefa 1 crearemos a base de datos coa que imos traballar nesta unidade didctica e
estableceremos unha conexin con esta empregando a extensin mysqli.
Erros
Xa vimos as funcins que nos permiten controlar os erros producidos na conexin base de
dato. A extensin MySQLi proporciona procedementos e propiedades de obxecto que dan
informacin do ltimo erro producido na base de datos:
PROPIEDADE
FUNCIN
errno
mysqli_errno(mysqli $con)
error
mysqli_error(mysqli $con)
Execucin de consultas
Ao igual que cando fixemos a conexin base de datos, podemos executar consultas
empregando mysqli de xeito procedimental e orientado a obxectos. Ademis, imos
distinguir dous tipos de consultas: as que devolven valores e as que non os devolven.
Consultas que non devolven valores
Pxina 11 de 36
$db->query($sentenza);
if($db->errno)
{die('<br/>ERRO('.$db->errno.') ->'.$db->error);}
No seguinte exemplo insertamos unha fila na base de datos e comprobamos que o nmero de filas afectadas 1 empregando a propiedade affected_rows. (Pode ser que a sintaxe
sexa correcta e a consulta funcione, pero que non produzca o resultado esperado)
$sentenza = "INSERT INTO provincia (codigo, nome)
VALUES ('37', 'Salamanca')";
$db->query($sentenza);
if($db->errno)
{die('<br/>ERRO('.$db->errno.') ->'.$db->error);}
if($db->affected_rows!=1)
{die ('Error: non o resultado esperado.');}
Cando realizamos unha insercin pode ser que o identificador da tboa sexa autoincremental, co cal non temos que definilo cando facemos a insercin pero podemos querer saber
cal foi o ltimo valor que se insertou. Para facer isto, temos a propiedade insert_id cando
estamos traballando coa interface orientada a obxectos, e a funcin
mysqli_insert_id(mysqli $link) para o estilo procedemental.
Na tarefa 2 realizaremos consultas de accin sobre a base de datos receitas.
Consultas que devolven valores
A execucin dunha senteza SELECT sobre a base de datos devolve un conxunto de resultados
que haber que procesar ou mostrar.
Para a execucin destas consultas emprganse os mesmos mtodos que os explicados
para as consultas de accin: query se usamos a interface orientada a obxectos e a funcin
mysqli_query co estilo procedimental. Os datos devlvense en forma dun obxecto da clase
mysqli_result. Ademis, se queremos coecer o nmero de filas que contn o resultado da
consulta podemos empregar o mtodo num_rows da clase mysqli_result para a interface
orientada a obxectos, e mysqli_num_rows(mysqli_result $result) para a interface procedimental.
A continuacin vemos os mtodos mis comns de manexar a informacin devolta:
Array asociativo: array mysqli_result::fetch_assoc( void )
Este mtodo manexa os datos de cada fila nun array asociativo, onde o nome de cada columna o ndice. Haber que crear un bucle para recorrer as filas e amosar o resultado:
$db = new mysqli("localhost", "alumno", "abc123.", "receitas");
$sql = "SELECT chef.nomeartistico as chef, receita.nome as receita
Pxina 12 de 36
Para amosar todas as columnas teremos que facer de xeito similar ao mtodo anterior, indicando a clave en funcin do parmetro que se lle pase:
while($fila = $resultado -> fetch_array(MYSQLI_ASSOC)){
echo "CHEF: ".$fila['chef'] . " --> RECEITA:".$fila['receita'] ."<br/>";
}
Pxina 13 de 36
Obxecto: mysqli_result::fetch_object
$params ]])
([string
$nome_clase
,array
Este mtodo obtn cada fila de resultados como se fose un obxecto, onde $nome_clase
o nome da clase a instanciar (opcional) e $params un array opcional de parmetros a
pasar ao construtor de dita clase.
while ($obxecto = $resultado->fetch_object()) {
echo $obxecto->chef . " --> " . $obxecto->receita . "<br/>";
}
A vantaxe de usar este mtodo que nos permite instanciar unha clase, a que lle pasamos
os datos da fila do obxecto, e que nos permite definir mtodos para traballar con estes. S
campos da fila pasan a ser atributos pblicos da clase, co cal poderemos acceder a estes
dentro da clase sen necesidade de definilos.
Por exemplo, se temos unha clase Consulta que recibe o resultado da nosa consulta, automticamente esta ter como atributos pblicos chef e receita, co cal podemos definir un
mtodo para amosalos como se ve a continuacin:
class Consulta {
function amosar(){
return "<br/>" . $this->chef . " --> " . $this->receita;
}
}
E para amosar o contido usamos o mtodo feth_object ao que lle pasamos a clase creada
para recoller o resultado:
$resultado = $db->query($sql);
while($fila = $resultado -> fetch_object("Consulta")){
echo $fila->amosar();
}
Inda que poda parecer extrao querer obter o resultado dunha fila da consulta como un
obxecto cando utilizamos o interface procedimental, tamn se pode facer usando object
mysqli_fetch_object (mysqli_result $result [,string $class_name[, array
$params ]]). E ao igual que coa interface orientada a obxetos tamn lle podemos indi-
car a clase que queremos instanciar e os parmetros que lle pasamos ao constructor desa
clase.
while ($obxecto = mysqli_fetch_object($resultado)) {
echo $obxecto->chef . " --> " . $obxecto->receita . "<br/>";
}
Pxina 14 de 36
Transaccins
Cando traballamos con bases de datos pode suceder que nalgunhas ocasins queiramos que
X operacins se executen como un bloque, isto , que ou ben se executen todas
correctamente, ou, se algunha falla, non queremos que se rexistre ningn cambio na base de
datos. Para isto debemos usar transaccins.
Os motores de almacenamento de tablas en MySQL son MyISAM e InnoDB. O que funciona por defecto o motor MyISAM, que excle a seguridade proporcionada pola integridade referencial e non permite transaccins. Por isto, para traballar con transaccins debemos traballar co motor InnoDB.
Por defecto, MySQL exectase en modo de execucin automtica (autocommit), o que
significa que cada consulta individual inclese dentro da sa propia transaccin. O que conleva que tan pronto como se executa unha sentenza, se modifica a tboa de MySQL, facendo
imposible a volta atrs. Para poder revertir os cambios das consultas (rollback) usando transaccins, debemos desctivar o modo de execucin automtica, o que iniciar a transaccin.
$db->autocommit(false);
Ou co estilo procedemental:
mysqli_autocommit($db, false);
Pxina 15 de 36
Cada vez que se enva unha consulta ao servidor, este debe analizala antes de executala.
Algunhas sentenzas SQL, como as que insiren valores nunha tboa, deben repetirse de
forma habitual nun programa. Para acelerar este proceso, MySQL admite consultas
preparadas. Estas consultas almacnanse no servidor listas para ser executadas cando sexa
necesario e presentan as seguintes vantaxes:
Optimizacin: xa que reducen o gasto de recursos na anlise e execucin de cada
consulta.
Seguridade: xa que ofrecen mis seguridade ante posibles inxeccins de SQL.
Pxina 16 de 36
Para traballar con consultas preparadas coa extensin MySQLi de PHP empregando a interface orientada a obxectos, debes utilizar a clase mysqli_stmt. Utilizando o mtodo
stmt_init da clase mysqli obtense un obxecto da devandita clase.
Os pasos que debes seguir para executar unha consulta preparada coa interface orientada
a obxectos son:
Preparar a consulta no servidor MySQL utilizando o mtodo prepare.
Executar a consulta, tantas veces como sexa necesario, co mtodo execute.
Unha vez que xa non se necesita mis, dbese executar o mtodo close.
Imos ver un exemplo:
$consulta = $db->stmt_init();
$consulta->prepare('INSERT INTO PROVINCIA (codigo, nome)
VALUES ("50", "Zaragoza")');
$consulta->execute();
$consulta->close();
$db->close();
O problema que de pouco serve preparar unha consulta de insercin de datos como a
anterior, se os valores que insire son sempre os mesmos. Por este motivo as consultas preparadas admiten parmetros. Para preparar unha consulta con parmetros, en lugar de poer os
valores debes indicar cun signo de interrogacin a sa posicin dentro da sentenza SQL.
$consulta->prepare('INSERT INTO PROVINCIA (codigo, nome) VALUES (?, ?) ');
E antes de executar a consulta tes que utilizar o mtodo bind_param para substitur cada
parmetro polo seu valor. O primeiro parmetro do mtodo bind_param unha cadea de
texto na que cada carcter indica o tipo dun parmetro, segundo a seguinte tboa:
CARACTER
TIPO DO PARMETRO
Nmero enteiro
Cadea de texto
Por exemplo:
$consulta = $db->stmt_init();
$consulta->prepare('INSERT INTO PROVINCIA (codigo, nome) VALUES (?, ?)');
$codigo = "50";
$provincia = "Zaragoza";
$consulta->bind_param('ss', $codigo, $provincia);
$consulta->execute();
$consulta->close();
$db->close();
No caso das consultas que devolven valores temos que vincular as variables resultado da
consulta preparada para almacenar o seu resultado. Temos dous mtodos para extraer o resultado das columnas da consulta preparada:
bind_result:
ese resultado.
fetch: Permite obter os resultado desas variables, para o cal deberemos recorrer un bucle
que permita obter os datos de todas as filas resultantes da consulta.
Pxina 17 de 36
$consulta = $db->stmt_init();
$consulta->prepare('SELECT nome, dificultade, tempo
FROM receita WHERE tempo<50');
$consulta->execute();
$consulta->bind_result($receita, $dificultade, $tempo);
while($consulta->fetch()) {
print "<p> $receita ( $dificultade ) - $tempo minutos</p>";
}
$consulta->close();
$db->close();
Para empregar consultas preparadas coa extensin MySQLi de PHP empregando a interface procedemental usaremos a funcin mysqli_stmt_init(). Os pasos a seguir son os
mesmos que se indicaron anteriormente, pero as funcins a empregar neste caso son: mysqli_stmt_prepare, mysqli_stmt_execute e mysqli_stmt_close respectivamente.
Imos ver un exemplo:
$sql = "INSERT INTO PROVINCIA (codigo, nome) VALUES (?, ?)";
$stmt = mysqli_stmt_init($db);
if(mysqli_stmt_prepare($stmt,$sql)){ //para comprobar erros no prepare
E para para asignar a variables os campos que se obteen tras a execucin temos mysqli_stmt_bind_result, usando mysqli_stmt_fetch() para recorrelos:
$db = mysqli_connect("localhost", "alumno", "abc123.", "receitas");
$sql = "SELECT nome, dificultade, tempo FROM receita WHERE tempo<50";
$stmt = mysqli_stmt_init($db);
if(mysqli_stmt_prepare($stmt,$sql)){
mysqli_stmt_execute($stmt);
$receita = "";
$dificultade = "";
$tempo = 0;
mysqli_stmt_bind_result($stmt,$receita, $dificultade, $tempo);
while (mysqli_stmt_fetch($stmt)) {
print "<p> $receita ( $dificultade ) - $tempo minutos</p>";
}
mysqli_stmt_close($stmt);
$db->close();
}
Pxina 18 de 36
Tarefas
As tarefas propostas son as seguintes.
Tarefa 1_a. Creacin e conexin a base de datos de traballo. Nesta tarefa crearemos a
base de datos coa que imos traballar nesta unidade didctica e estableceremos unha
conexin con esta empregando a extensin mysqli.
Tarefa 1_b. Creacin dunha clase conexin. Nesta tarefa crearemos unha clase
conexin para conectarse a unha base de datos que se pasa como parmetro no servidor
local.
Tarefa 2. Realizacin de consultas de accin. Nesta tarefa realizaremos consultas de
accin sobre a base de datos receitas empregando a interface orientada a obxectos e o
estilo procedemental.
Tarefa 3. Realizacin de consultas que devolven valores. Nesta tarefa realizaremos
consultas que devolven valores sobre a base de datos receitas.
Tarefa 4. Realizacin de operacins que implican transaccins. Nesta tarefa
realizaremos operacins que deban executarse como un nico bloque.
Tarefa 5. Realizacin de operacins con consultas preparadas. Nesta tarefa
empregaremos consultas preparadas para axilizar a execucin cando se realiza a mesma
consulta en mis dunha ocasin.
Pxina 19 de 36
1.2.1
Crea unha clase de nome accesoBD na que o construtor recibe como parmetro a base de
datos, o usuario e a contrasinal, e aemis ten:
Un mtodo abrirConexion que devolve un obxecto coa conexin establecida base de
datos no servidor local.
Un mtodo pecharConexion que pecha a conexin coa base de datos
Autoavaliacin
a) Tarefa 1_a
Pxina 20 de 36
Nesta pantalla prememos en Agregar usuario para engadir o usuario alumno e marcamos
a opcin "Otorgar todos los privilegios para la base de datos receitas":
Isto engade o usuario alumno e otrgalle todos os privilexios sobre a base de datos receitas
Pxina 21 de 36
b) Tarefa 1_b
<?php
/** Xestin do acceso a bases de datos no servidor local empregando mysqli
**/
class accesoBD {
private $usuario;
private $contrasinal;
private $bd;
public function __construct($usuario, $contrasinal, $bd) {
$this->usuario=$usuario;
$this->contrasinal=$contrasinal;
$this->bd=$bd;
}
/** Mtodo para establecer a conexin cunha base de datos **/
public function abrirConexion () {
$con = new mysqli('localhost',$this->usuario,$this->contrasinal,
$this->bd);
if ($con ->connect_error) {
echo "Erro na conexin a base de datos $this->bd:
($con->connect_errno) $con->connect_error\n";
exit;
}
return $con;
}
/** Mtodo para pechar a conexin cunha base de datos **/
public function pecharConexion ($con) {
$con->close();
}
}
?>
1.2.2
Crear unha tboa Libro coa seguinte estrutura na base de datos receitas, establecendo as
regras de integridade que sexan necesarias, empregando a interface orientada a obxectos.
Usa a clase conexin definida na tarefa 1_b.
Atributo
Descripcin
Codigo
Autoincremental
Titulo
Contn o ttulo do libro. Todos os libros deben ter un ttulo. Poden existir dous libros co mesmo
ttulo.
Editorial
Contn a editorial que publicou este libro. obrigatorio introducila para todos os libros.
Paxinas
Nmero de pxinas de que consta o libro. Pode ser que non teamos esta informacin
Cod_chef
Cdigo do chef que escribiu este libro. Todos os libros foron escritos por un nico chef que
debe existir na base de datos.
Pxina 22 de 36
b) Tarefa 2_b
b) Tarefa 2_b
<?php
/* establecemos conexin coa base de datos receitas */
$db = mysqli_connect("localhost", "alumno", "abc123.", "receitas");
/* comproba a conexin */
if (mysqli_connect_errno()) {
printf("Fallou a conexin a base de datos receitas. ERRO(%d): %s\n",
mysqli_connect_errno(),mysqli_connect_error());
exit();
}
/* executamos a consulta de insercin */
$consulta = "INSERT INTO libro (titulo, editorial, paxinas, cod_chef)
VALUES ('Receitas imaxinativas','Cocina hoxe', NULL,
(select codigo from chef where nomeartistico='EL TITO'));";
$resultado= mysqli_query($db, $consulta);
/* comprobamos se houbo algn erro */
if(mysqli_errno($db))
{die('<br/>ERRO('.mysqli_errno($db).') ->'.mysqli_error($db));}
/* comprobamos que o nmero de filas afectadas foi 1 */
if(mysqli_affected_rows($db)!=1)
{die ('Error: non o resultado esperado.');}
else {printf("<br/>Inserido %d rexistro co cdigo
%d",mysqli_affected_rows($db),
mysqli_insert_id($db));}
mysqli_close($db);
?>
Pxina 23 de 36
1.2.3
Fai un script que lea da base de datos a seguinte informacin relativa as receitas e a amose
segn se ve na imaxe:
o A informacin debe de visualizarse pxinada (No exemplo, a variable que indica o
nmero de rexistros por pxinas ten valor 5)
b) Tarefa 3_b
Imos ampliar a tarefa anterior. Cando se seleccione unha provincia cargarase unha pxina
con informacin da provincia como se amosa na seguinte imaxe:
Autoavaliacin
Pxina 24 de 36
a) Tarefa 3_a
<html>
<head>
<title>Paxinar resultados - Tarefa 6_3a</title>
<link rel="stylesheet" href="tarefa6_3.css" />
</head>
<body>
<div id="contido">
<h1>RECEITAS</h1>
<?php
$numRexistros = 5; //Rexistros por pxina
$paxina = 1; //por defecto a paxina ser a primeira
//primero obtemos o parmetro que nos d en qu pxina estamos
if(array_key_exists('pax', $_GET)){
$paxina = $_GET['pax'];
}
// necesitamos saber o nmero de rexistros que devolve a consulta
$db = mysqli_connect("localhost", "alumno", "abc123.",
"receitas");
$resultado = mysqli_query($db,"SELECT * FROM receita");
$totalRexistros = mysqli_num_rows($resultado);
//dividimos o total de rexistros que devolve a consulta polo
//nmero de rexistros que queremos por pxina(redondeando alza)
$totalPaxinas = ceil($totalRexistros/$numRexistros);
// obtenemos o segmento paxinado que corresponde a esta pxina
$resultado = mysqli_query($db,"SELECT nome, dificultade, tempo
FROM receita
LIMIT ".(($paxina-1)*$numRexistros).", $numRexistros ");
echo '<table>';
while($row = mysqli_fetch_array($resultado))
{
echo '<tr>
<td>'.$row['nome'].'</td>
<td>'.$row['dificultade'].'</td>
<td>'.$row['tempo'].' minutos</td>
</tr>';
}
echo '</table><br/><br/><div id="paxinado">';
//enlaces para o paxinado
for($i=0; $i<$totalPaxinas;$i++){
echo '<a href="paginarBD.php?pax='.($i+1).'">'.($i+1).'</a> | ';
}
echo '</div>'
?>
</div>
</body>
</html>
b) Tarefa 3_b
<?php
$db = @new mysqli('localhost', 'alumno', 'abc123.', 'receitas');
if ($db->connect_error)
{die('Error de conexin: ' . $db->connect_error);}
$sql="SELECT * from provincia";
$resultado = $db->query($sql);
if ($resultado->num_rows > 0)
{
$combo="";
while ($row = $resultado->fetch_array(MYSQLI_ASSOC))
{
$combo .= " <option value='"
.$row['codigo']."'>".$row['nome']."</option>";
}
}
else
{
Pxina 25 de 36
c) Tarefa 3_c
Tarefa3c.php
<?php
$db = @new mysqli('localhost', 'alumno', 'abc123.', 'receitas');
if ($db->connect_error)
{die('Error de conexin: ' . $db->connect_error);}
$sql="SELECT * from provincia";
$resultado = $db->query($sql);
if ($resultado->num_rows > 0)
{
$combo="";
while ($row = $resultado->fetch_array(MYSQLI_ASSOC))
{
$combo .=" <option value='".
$row['codigo']."'>".$row['nome']."</option>";
}
}
else
{
echo "A tboa Provincia non ten datos";
}
$db->close(); //cerramos la conexin
?>
<html>
<head>
<title>Seleccin por provincia</title>
</head>
<body>
<form method="post" action="Tarefa6_3c2.php">
<p> Selecciona unha provincia para visualizar os chefs desta:</p>
<select name="provincia">
<?php echo $combo; ?>
</select>
<input type="submit" value="Enviar"/>
</form>
</body>
</html>
Tarefa3c_2.php
<html>
<head>
<TITLE>Cocieiros da provincia.</TITLE>
<link rel="stylesheet" href="tarefa6_3.css" />
</head>
<body>
<div id="contido">
<?php
$provincia = $_POST['provincia'];
$db = mysqli_connect('localhost','alumno','abc123.','receitas');
if (mysqli_connect_error($db)) {
echo "Erro na conexin a base de datos: (mysqli_connect_errno($db))
Pxina 26 de 36
mysqli_connect_error($db)\n";
exit;
}
$sql = "select nome from provincia where codigo = '$provincia'";
$resultado = mysqli_query($db, $sql);
if(mysqli_errno($db))
{die('<br/>ERRO('.mysqli_errno($db).') ->'.mysqli_error($db));}
$fila = mysqli_fetch_assoc($resultado);
echo '<h1>Provincia de '.$fila['nome'].'</h1>';
echo '<h2>CHEFS</h2>';
$sql = "select CONCAT(nome,' ',apelido1,' ',IFNULL(apelido2,''))
. " as chef, nomeartistico, localidade "
. "from chef where cod_provincia = '$provincia'";
$resultado = mysqli_query($db, $sql);
if(mysqli_errno($db))
{die('<br/>ERRO('.mysqli_errno($db).') ->'.mysqli_error($db));}
echo "<table><tr><th>NOME</th>"
. "<th>NOME ARTSCICO</th>"
. "<th>LOCALIDADE</th></tr>";
while($fila = mysqli_fetch_assoc($resultado)){
echo "<tr><td>".$fila['chef']."</td>"
. "<td>".$fila['nomeartistico']."</td>"
. "<td>".$fila['localidade']."</td></tr>";
}
mysqli_close($db);
?>
</div>
</body>
</html>
1.2.4
Pxina 27 de 36
1.2.5
Pxina 28 de 36
Pxina 29 de 36
1.3
1.4
Recursos didcticos
Apuntes do profesor
Ordenador persoal con:
o Software de servidor web Apache ou semellante.
o Intrprete da linguaxe PHP.
o Contorno de desenvolvemento de aplicacins web NetBeans ou semellante.
o Navegador web Firefox ou semellante.
Pxina 30 de 36