sábado, 22 de noviembre de 2014

Acceso a las bases de datos con PHP - 2 de 6



La variable $registro es una tabla en la que los índices son los nombres de los campos que ha devuelto la consulta. Esta tabla se elimina con los nuevos valores de cada registro. Fetch permite pasar de registro en registro y, si no hay más registros, la condición del bucle while es falsa. Por lo tanto, el script sale del bucle.

Otra función que permite el fetch es mysqli_fetch_row().

Esta función toma como argumento el resultado que la función mysqli_query() ha devuelto y devuelve una tabla indexada que tiene como índice un contador de 0 a n que representa las columnas en el orden establecido por la consulta.

Por ejemplo, para mostrar los apellidos y el nombre de la tabla Persona:

<?php
// Conexión a la base de datos
$base = mysqli_connect("127.0.0.1", "root", "", "_test");
if ($base) {
echo ’Conexión realizada.<br />’;
echo ’Información del servidor:’.mysqli_GET_host_info($base).
’<br />’;
// Ejecución de la consulta
$resultado = mysqli_query($base, ’Select Nombre, Apellidos FROM Persona’);
if ($resultado == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
//fetch en cada registro devuelto por la consulta
while ($registro = mysqli_fetch_row($resultado)) {
// Examinar apellidos y nombre de las personas
echo "Apellidos:".$registro[0]." y nombre:".$registro[1]."<br />";
}
}
if (mysqli_close($base)) {
echo ’Desconexión realizada.<br />’;
}
else {
echo ’Error en la desconexión.’;
}
}
else {
printf(’Error %d : %s.<br/ >’,mysqli_connect_errno(),
mysqli_connect_error());
}
?>

Da como resultado la misma información que antes.

Esta vez la tabla contiene el valor de los apellidos en $registro[0] y el valor del nombre en $registro[1]. Esta función es menos práctica, ya que el índice 0 corresponde a los apellidos y el índice 1 corresponde al nombre.

Otra función que permite el fetch es mysqli_fetch_array(). Toma como argumento complementario una constante que permite recuperar una tabla asociativa, una tabla indexada o las dos a la vez.

Las constantes son:
  • MYSQLI_ASSOC: devuelve una tabla asociativa que equivale a mysqli_fetch_assoc().
  • MYSQLI_NUM: devuelve una tabla indexada que equivale a mysqli_fetch_row().
  • MYSQLI_BOTH: devuelve una tabla asociativa e indexada a la vez.

En el capítulo El objeto se explicarán estos conceptos.

Para terminar, la última función que permite el fetch es mysqli_fetch_object().

Esta función toma como argumento el resultado que la función mysqli_query() ha enviado y devuelve un objeto con un atributo por cada campo devuelto por la consulta. Este atributo tiene como nombre y como valor respectivamente este y el del campo.

Por ejemplo, para mostrar los apellidos y el nombre de la tabla Persona:

<?php
// Conexión a la base de datos
$base = mysqli_connect("127.0.0.1", "root", "", "_prueba");
if ($base) {
echo ’Conexión realizada.<br />’;
echo ’Información del servidor:’.mysqli_GET_host_info($base).
’<br />’;
// Ejecución de la consulta
$resultado = mysqli_query($base, ’Select Nombre, Apellidos FROM Persona’);
if ($resultado == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
//fetch en cada registro devuelto por la consulta
while ($objeto = mysqli_fetch_object($resultado)) {
// Examinar apellidos y nombre de las personas
echo "Apellidos:".$objeto->Apellido." y nombre:".$objeto->Nombre."<br />";
}
}
if (mysqli_close($base)) {
echo ’Desconexión realizada.<br />’;
}
else {
echo ’Error en la desconexión.’;
}
}
else {
printf(’Error %d : %s.<br/ >’,mysqli_connect_errno()
,mysqli_connect_error());}
?>

Da como resultado:

Conexión realizada.
Información del servidor:MySQL host info: 127.0.0.1 con TCP/IP
Apellidos:Morales Honhon y nombre:Nanie
Apellidos:Manrique Adán y nombre:David
Apellidos:Malasaña Agora y nombre:María
Apellidos:Magalán y nombre:Roberto
Apellidos:Olís de las Heras y nombre:Manuel
Apellidos: Germán y nombre:Margarita
Desconexión realizada.


b. Escribir datos

Para escribir datos, debe ejecutar una consulta de tipo INSERT.

Utilice en este caso la función mysqli_query().

Esta función toma como argumentos:
  • El objeto de conexión: objeto que la función mysqli_connect() ha devuelto.
  • La consulta: cadena de caracteres que contiene la consulta SQL.

Por ejemplo, si quiere insertar una persona llamada Nadia González Pérez, de 31 años de edad:

<?php
// Conexión a la base de datos
$base = mysqli_connect("127.0.0.1", "root", "", "_prueba");
if ($base) {
echo ’Conexión realizada.<br />’;
echo ’Información del servidor:’.mysqli_GET_host_info($base).’<br />’;
$sql = "INSERT INTO Persona (Nombre, Apellidos, Edad) VALUES
(’Nadia’, ’González Pérez’,31)";
// Ejecución de la consulta
$resultado = mysqli_query($base, $sql);
if ($resultado == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
echo "Persona guardada.<br />";
}
if (mysqli_close($base)) {
echo ’Desconexión realizada.<br />’;
}
else {
echo ’Error en la desconexión.’;
}
}
else {
printf(’Error %d :
%s.<br/>’,mysqli_connect_errno(),mysqli_connect_error());
}
?>

Ahora tiene un nuevo registro en la base de datos:


Observe que el id_person no se ha añadido en la consulta. De hecho, es autoincremental; por lo tanto, la base de datos asignará un nuevo nombre al id_person.

Cuando inserta una nueva persona, no conoce su identificador. Para recuperar el último Id autoincremental que se ha añadido a la base de datos, debe utilizar la función mysqli_insert_id(). Esta función toma como argumento el objeto de conexión y devuelve el último identificador autoincremental que se ha añadido en la base de datos.

Por ejemplo, para insertar una persona llamada David Morales de 61 años de edad, añada después de echo "Persona guardada.<br />"; los siguientes registros:

$id = mysqli_insert_id($base);
echo "Su identificador de sesión es:".$id.".<br />";

Da como resultado:

Conexión realizada.
Información del servidor:MySQL host info: 127.0.0.1 con TCP/IP
Persona guardada.
Su identificador de sesión es: 8.
Desconexión realizada.


c. Eliminar datos

Para eliminar datos, ejecute una consulta de tipo DELETE.

Utilice en este caso la función mysqli_query().

Esta función toma como argumentos:
  • El objeto de conexión: objeto que la función mysqli_connect() ha devuelto.
  • La consulta: cadena de caracteres que contiene la consulta SQL.

Por ejemplo, para eliminar una persona cuyo nombre es David:

<?php
// Conexión a la base de datos
$base = mysqli_connect("127.0.0.1", "root", "", "_prueba");
if ($base) {
echo ’Conexión realizada.<br />’;
echo ’Información del servidor:’.mysqli_GET_host_info($base).
’<br />’;
$sql = "DELETE FROM Persona WHERE Nombre = ’David’";
// Ejecución de la consulta
$resultado = mysqli_query($base, $sql);
if ($resultado == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
echo "Persona eliminada.<br />";
}
if (mysqli_close($base)) {
echo ’Desconexión realizada.<br />’;
}
else {
echo ’Error en la desconexión.’;
}
}
else {
printf(’Error %d : %s.<br/>’,mysqli_connect_errno(),
mysqli_connect_error());
}
?>

Da como resultado:

Conexión realizada.
Información del servidor:MySQL host info: 127.0.0.1 con TCP/IP
Persona eliminada.
Desconexión realizada.

Aunque no exista la persona y aparezca el mensaje <<Persona eliminada>>, este mensaje se muestra cuando no hay error en la consulta. Si quiere saber el número de registros, debe utilizar la función mysql_affected_rows ().


d. Actualizar datos

Para modificar datos, ejecute una consulta de tipo UPDATE.

Utilice en este caso la función mysqli_query().

Esta función toma como argumentos:
  • El objeto de conexión: objeto que la función mysqli_connect() ha devuelto.
  • La consulta: cadena de caracteres que contiene la consulta SQL.
  • También puede utilizar la función mysqli_affected_rows(), que toma como argumento el resultado que ha devuelto la función mysqli_connect() y devuelve el número de registros que la consulta ha modificado.

Por ejemplo, para modificar la persona cuyo nombre es David cambiando su apellido por MORALES y su edad de 61 a 62 años:

<?php
// Conexión a la base de datos
$base = mysqli_connect("127.0.0.1", "root", "", "_prueba");
if ($base) {
echo ’Conexión realizada.<br />’;
echo ’Información del servidor:’.mysqli_GET_host_info($base).
’<br />’;
$sql = "UPDATE Persona SET Apellidos = ’MORALES’, Edad = 62 WHERE
Apellidos = ’Morales’";
// Ejecución de la consulta
$resultado = mysqli_query($base, $sql);
if ($resultado == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
$apellido_persona = mysqli_affected_rows($base);
echo "Apellidos de personas modificadas:".$apellido_persona.".<br />";
}
if (mysqli_close($base)) {
echo ’Desconexión realizada.<br />’;
}
else {
echo ’Error en la desconexión.’;
}
}
else {
printf(’Error %d : %s.<br/>’,mysqli_connect_errno(),
mysqli_connect_error());
}
?>

Da como resultado:

Conexión realizada.
Información del servidor:MySQL host info: 127.0.0.1 con TCP/IP
Número de personas modificadas:1.
Desconexión realizada.



Espero haber ayudado en algo. Hasta la próxima oportunidad!









No hay comentarios:

Publicar un comentario en la entrada