Publicado el 24 de Junio del 2017
1.379 visualizaciones desde el 24 de Junio del 2017
48,0 KB
10 paginas
Creado hace 16a (11/12/2008)
Programación en Internet 2008-2009
Departamento de Lenguajes y
Sistemas Informáticos
mysqli
mysqli
Programación en Internet
Curso 2008-2009
Programación en Internet – Curso 2008-2009
Índice
f
di
I t
• ¿Qué es?
• Interfaz procedimental
t l
• Interfaz orientado a objetos
• Sentencias preparadas
DLSI - Universidad de Alicante
1
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
¿Qué es?
• mysqli es una extensión de PHP que permite
i
t
d
acceder a ciertas funciones disponibles a
partir de MySQL 4.1 que no se pueden
emplear con la extensión tradicional
ibl
di
f
i
• Proporciona:
f
t
I
– Mayor velocidad y seguridad
– Interfaz procedimental u orientado a objetos
i
– Soporte de transacciones
– Nuevo protocolo binario de MySQL 4.1 que
t d
bj
di
t
t
l
permite ciertas funciones como la ejecución de
sentencias preparadas
Programación en Internet – Curso 2008-2009
Interfaz procedimental
• Principales funciones:
error de conexión
sentencia SQL
último error
último error
– mysqli connect(servidor, usuario, contraseña,
do , usua o, co t ase a,
ysq _co ect(se
baseDatos): devuelve un identificador de recurso o false si la
conexión falla
– mysqli_connect_error(): devuelve una descripción del último
– mysqli_query(identificador, sentencia): ejecuta una
– mysqli_error(identificador): devuelve una descripción del
– mysqli_fetch_assoc(resultado): devuelve la siguiente fila
en el resultado o false en caso contrario
– mysqli_free_result(resultado): libera la memoria
empleada por un resultado
– mysqli_close(identificador): cierra la conexión con una
base de datos
DLSI - Universidad de Alicante
2
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Interfaz procedimental
<?php
// Conecta con el servidor de MySQLy
$link = @mysqli_connect(
'localhost', // El servidor
'wwwdata', // El usuario
'', // La contraseña
'biblioteca'); // La base de datos
if(!$link) {
) {
( $
echo '<p>Error al conectar con la base de datos: '
. mysqli_connect_error();
echo '</p>';
exit;
}
Programación en Internet – Curso 2008-2009
Interfaz procedimental
// Ejecuta una sentencia SQL
$sentencia = 'SELECT * FROM libros';
if(!($resultado = @mysqli_query($link, $sentencia)))
{
echo "<p>Error al ejecutar la sentencia
<b>$sentencia</b>: " . mysqli_error($link);
echo '</p>';
exit;
}
DLSI - Universidad de Alicante
3
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Interfaz procedimental
echo '<table><tr>';
echo '<th>IdLibro</th><th>Título</th><th>Resumen</th>';
echo
'<th>Autor</th><th>Categoría</th><th>Editorial</th><th>Anyo
</th></tr>';
// Recorre el resultado y lo muestra en forma de tabla HTML
while($fila = mysqli_fetch_assoc($resultado)) {
echo '<tr>';
echo '<td>' . $fila['IdLibro'] . '</td>';
echo '<td>' . $fila['Titulo'] . '</td>';
echo '<td>' . $fila['Resumen'] . '</td>';
echo '<td>' . $fila['Autor'] . '</td>';
echo '<td>' . $fila['Categoria'] . '</td>';
echo '<td>' . $fila['Editorial'] . '</td>';
echo '<td>' . $fila['Anyo'] . '</td>';
echo '</tr>';
}
echo '</table>';
Programación en Internet – Curso 2008-2009
Interfaz procedimental
// Libera la memoria ocupada por el resultado
mysqli free result($resultado);
y q _
// Cierra la conexión
mysqli_close($link);
_
?>
DLSI - Universidad de Alicante
4
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
• Mismas funciones que el interfaz procedimental, pero
son métodos de objetos
son métodos de objetos
• Clases:
– mysqli: representa una conexión entre PHP y una base de
datos en MySQL
– mysqli_stmt: representa una sentencia preparada
– mysqli_result: representa el resultado de una consulta
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
• mysqli->métodos:
– connect(servidor, usuario, contraseña, baseDatos):
)
(
,
,
,
conecta con una base de datos
– query(sentencia): ejecuta una sentencia SQL, devuelve un
objeto de tipo mysqli_result
– prepare(sentencia): crea una sentencia preparada, devuelve
un objeto de tipo mysqli_stmt
– close(): cierra la conexión con una base de datos
• mysqli->propiedades:
última operación
– affected_rows: devuelve el número de filas afectadas por la
l
d fil
l ú
t d
d
f
l
– error: devuelve una descripción del último error
– field_count: devuelve el número de columnas de la última
consulta
DLSI - Universidad de Alicante
5
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
• mysqli_result->métodos:
– fetch assoc(): devuelve la siguiente fila en el resultado o
()
_
g
false en caso contrario
– free_result(): libera la memoria empleada por un resultado
– close(): cierra el resultado
• mysqli_result->propiedades:
– field_count: devuelve el número de columnas de la última
consulta
– num_rows: devuelve el número de filas en el resultado
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
<?php
// Conecta con el servidor de MySQLy
$mysqli = @new mysqli(
'localhost', // El servidor
'wwwdata', // El usuario
'', // La contraseña
'biblioteca'); // La base de datos
if(mysqli connect errno()) {
()) {
( y q _
echo '<p>Error al conectar con la base de datos: '
_
. mysqli_connect_error();
echo '</p>';
exit;
}
DLSI - Universidad de Alicante
6
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
// Ejecuta una sentencia SQL
$sentencia = 'SELECT * FROM libros';
if(!($resultado = $mysqli->query($sentencia))) {
echo "<p>Error al ejecutar la sentencia
<b>$sentencia</b>: " . $mysqli->error;
echo '</p>';
exit;
}
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
echo '<table><tr>';
echo '<th>IdLibro</th><th>Título</th><th>Resumen</th>';
echo
'<th>Autor</th><th>Categoría</th><th>Editorial</th><th>Anyo
</th></tr>';
// Recorre el resultado y lo muestra en forma de tabla HTML
while($fila = $resultado->fetch_assoc()) {
echo '<tr>';
echo '<td>' . $fila['IdLibro'] . '</td>';
echo '<td>' . $fila['Titulo'] . '</td>';
echo '<td>' . $fila['Resumen'] . '</td>';
echo '<td>' . $fila['Autor'] . '</td>';
echo '<td>' . $fila['Categoria'] . '</td>';
echo '<td>' . $fila['Editorial'] . '</td>';
echo '<td>' . $fila['Anyo'] . '</td>';
echo '</tr>';
}
echo '</table>';
DLSI - Universidad de Alicante
7
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Interfaz orientado a objetos
// Libera la memoria ocupada por el resultado
$resultado->close();
// Cierra la conexión
$mysqli->close();
?>
Programación en Internet – Curso 2008-2009
Sentencias preparadas
• Mecanismo que permite optimizar la ejecución de
una sentencia SQL cuando se repite varias veces
una sentencia SQL cuando se repite varias veces
– Realizar una búsqueda pero con distintos valores
select nombre,edad from cliente where edad >=
select nombre,edad from cliente where edad >=
18 and edad <= 25
20 and edad <= 30
– Insertar varias filas similares
insert into Personas values ("Juan", "López")
insert into Personas values ("Pedro",
"Martínez")
DLSI - Universidad de Alicante
8
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Sentencias preparadas
• Las sentencias preparadas están optimizadas para
ser ejecutadas muchas veces
ser ejecutadas muchas veces
• Previamente a su ejecución, su código es optimizado
para tardar menos al ejecutar
– Este proceso también consume un tiempo que puede
penalizar la ejecución si solo lo utilizamos para ejecutar
pocas sentencias
Programación en Internet – Curso 2008-2009
Sentencias preparadas
• Los valores no definidos se indican son el símbolo
interrogación (?)
interrogación (?)
• Antes de ejecutar la sentencia, se asignan los
valores con el método bind_param()
DLSI - Universidad de Alicante
9
Programación en Internet 2008-2009
Programación en Internet – Curso 2008-2009
Sentencias preparadas
• mysqli_stmt->métodos:
– bind param(): enlaza variables como parámetros de una
_p
()
p
sentencia preparada
– bind_result(): enlaza variables para almacenar el resultado de
una sentencia preparada
– execute(): ejecuta una sentencia preparada
– close(): cierra una sentencia preparada
• mysqli_stmt->propiedades:
– field_count: devuelve el número de columnas de la última
– num_rows: devuelve el número de filas en el resultado
– param_count: devuelve el número de parámetros de la sentencia
consulta
preparada
Programación en Internet – Curso 2008-2009
Sentencias preparadas
<?php
?>
// Abre conexión con la base de datos
// ...
$stmt = $mysqli->prepare("INSERT INTO Productos VALUES (?,
?, ?, ?)");
// i: entero, s: otros tipos, d: double o float
$stmt->bind_param('issd', $codigo, $nombre, $descripcion,
$precio);
$codigo = 123;
$nombre = 'Mk1 20';
$descripcion = 'Televisor Mk1 20 de pantalla plana';
$precio = 1100.50;
$stmt->execute();
$stmt->close();
// Cerrar la conexión
// ...
DLSI - Universidad de Alicante
10
Comentarios de: mysqli (1)