domingo, 16 de noviembre de 2014

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



1. Introducción

Hemos visto anteriormente las diferentes consultas SQL; vamos a ver ahora cómo se ejecutan en PHP y a mostrar el resultado.

En esta parte del capítulo aprenderá a leer, insertar, modificar y eliminar datos desde formularios PHP.

Partiremos de la siguiente estructura de la tabla Persona.



Y también los siguientes datos:


Hay dos extensiones que utilizan las funciones para acceder a MySQL. Son mysql_ y mysqli_. Estas dos extensiones son muy similares, pero mysqli_ es más reciente (versión 5 de PHP) y tiene algunas funcionalidades complementarias. Por lo tanto, utilizaremos mysqli_ en lo que queda de capítulo. En el próximo capítulo, presentaremos la extensión PDO (PHP Data Object). Es una extensión aún más reciente y completa a la hora de utilizar objetos.


2. Conexión

La función que permite conectarse a MySQL es mysqli_connect().

Esta función toma como argumentos:

  • El host: cadena de caracteres que contiene el nombre o la dirección IP del host, que corresponde a "localhost" o 127.0.0.1 si trabaja en modo local.
  • El usuario: cadena de caracteres que contiene el nombre de usuario para conectarse a la base de datos. Corresponde a "root" si trabaja en modo local. Tenga cuidado, ya que este usuario tiene todos los derechos sobre su base de datos.
  • La contraseña: cadena de caracteres que contiene la contraseña asociada al usuario. Por defecto se encuentra vacía.
  • El nombre de la base de datos: cadena de caracteres opcional que contiene el nombre de su base de datos.
  • El puerto: número de puerto opcional para conectarse al servidor MySQL, que por defecto equivale a 3306.
Esta función devuelve falso en caso de error, o un objeto mysqli que contiene el identificador de conexión en caso de éxito.

Por ejemplo:

<?php
$connect = mysqli_connect("127.0.0.1", "root", "", "_prueba");
?>

Otro ejemplo que gestiona los errores es:

<?php
$base = mysqli_connect("127.0.0.1", "root", "", "_prueba");
if ($base) {
echo ’Conexión realizada.<br />’;
echo ’Información sobre el servidor:’.mysqli_GET_host_info($base);
}
else {
printf(’Error %d : %s.<br/>’,mysqli_connect_errno(),
mysqli_connect_error());
} //%d representa un decimal que es el número de error que envía mysql connect errno. %s representa una cadena de caracteres, que es la etiqueta del error que envía mysql connect error
}
?>

La función mysqli_GET_host_info($base) devuelve información a su servidor.

La función mysqli_connect_errno() devuelve el número del error en caso de un error de conexión.

La función mysqli_connect_error() devuelve el mensaje de error en caso de un error de conexión.

También se puede conectar al servidor y a la base de datos con ayuda de la función mysqli_select_db(). Esta función toma como argumento el objeto devuelto por la función mysqli_connect().

Por ejemplo:

<?php
$base = mysqli_connect(’127.0.0.1’, ’root’, ’’);
mysqli_select_db($base,’_prueba’) ;
?>


3. Desconexión

La función que permite desconectarse de MySQL es mysqli_close().

Por ejemplo:

if (mysqli_close($base)) {
echo ’Desconexión realizada.<br />’;
}
else {
echo ’Error en la desconexión.’;
}

No está obligado a cerrar la conexión, ya que PHP lo hace automáticamente al final del script. No obstante, le recomendamos que la cierre, ya que aumentará la velocidad de sus scripts.


4. Consultas no preparadas

a. Leer datos

La función que permite ejecutar una consulta SQL es: mysqli_query().

Esta función toma como argumentos:

  • El objeto de la conexión: objeto que reenvía la función mysqli_connect().
  • La consulta: cadena de caracteres que contiene la consulta SQL.
Esta función devuelve false en caso de fallo y true o un identificador de sesión en caso de éxito.
La función que permite conocer el número de registros en el resultado de la consulta es: mysqli_num_rows().

Esta función toma como argumento el resultado que ha devuelto la función mysqli_query() y devuelve el número de registros enviado por la consulta SQL.

Por ejemplo, para obtener el número de registros en la tabla Persona:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Ejercicio con mysqli</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<?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 * FROM Persona’);
if ($resultado == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
// Examinar el número de registros
echo ’Número de personas: ’.mysqli_num_rows($resultado).’<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());
}
?>
</body>
</html>

Da como resultado:

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

En adelante, ya no escribimos el código HTML del inicio de la página; solo indicamos el código PHP.

Si ahora quiere mostrar los datos de la tabla Persona, debe utilizar fetch, que permite leer el registro actual y desplazarse al siguiente registro.

Hay varias funciones que permiten utilizar fetch.

La función más actual es mysqli_fetch_assoc().

Esta función toma como argumento el resultado que la función mysqli_query() ha devuelto y devuelve una tabla asociativa que tenga como índice el nombre de la columna de la consulta SQL.

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 ($registro = mysqli_fetch_assoc($resultado)) {
// Examinar apellidos y nombre de las personas
echo "Apellidos:".$registro[’Apellido’]."
y nombre:".$registro[’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 a través de 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.

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.



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









No hay comentarios:

Publicar un comentario en la entrada