6.4. Conectividad desde un lenguaje huésped

PHP puede conectarse con bases de datos de dos formas: mediante el uso directo de funciones propias del intÉrprete que dependen del gestor de base de datos usadas o a tráves del estándar ODBC (Open Data Base Connectivity).

En PHP el trabajo con la base de datos se basa en tres etapas fundamentales:

  1. Establecer contacto con la base de datos
  2. Realizar las operaciones necesarias
  3. Cerrar los recursos empleados

Conectar con una base de datos MySQL - PHP

Para conectarse con una base de datos es necesario crear una conexión con el servidor. Esto se logra en PHP mediante el uso de la función mysql_connect(). Sintaxis

mysql_connect($ruta, $usuario, $password);
Parámetro Descripción
$ruta Opcional. Especéfica el servidor al cual se conecta. El valor por defecto es "localhost:3306".
$usuario Opcional. Identifica el usuario. El valor por defecto es el nombre de usuario propietario del proceso.
$password Opcional. El valor por defecto es "". No recomendado
ruta invariablemente en un servidor de paga o remoto sera LOCALHOST

Ejemplo de conexión de una base de datos MySQL desde PHP

<?php
  $ruta      = "localhost";
  $login     = "mi_login";
  $password  = "mi_password";
  $db        = "miBaseDatos";
  $conexion  = mysql_connect( $ruta, $login, $password)
               or die(mysql_error());
  mysql_select_db( $db, $conexion ) or die(mysql_error());
  echo "conectado bravo!!!!!!";
  mysql_close($conexion);
?>

Crear una base de datos en MySQL - PHP

La sentencia CREATE DATABASE es usada para crear una base de datos en MySQL. Su sintaxis es la siguiente:

<?php
   include('ruta.php');
   $conexion = mysql_connect($ruta,$usuario, $password);
   if(!$conexion) {
      die('Imposible conexión al servidor: '. mysql_error());
   }
   $sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD';
   if (mysql_query($sentencia, $conexion)) {
       echo 'Base de datos creada';
   } else {
       echo 'Error al crear la base de datos: '.mysql_error();
  }
  mysql_close($conexion); 
?>

Crear una tabla en MySQL - PHP

El componente principal de una base de datos son las tablas, MySQL tiene varios tipos de tablas, nosotros usaremos en este sitio las tablas InnoDB, por razones de integridad referencial y concurrencia.

Ejemplo: El Campeonato Mundial de Pilotos es otorgado por la Federación Internacional de Automovilismo al piloto de Fórmula 1 más exitoso de la temporada, determinado por el sistema de puntuación en relación con los resultados de los Grandes Premios. El primer Campeonato Mundial de Pilotos fue otorgado en la temporada 1950 a Giuseppe Farina. Considere la siguiente tabla de datos correspondientes a los campeones de Formula 1 (2000 - 2011) y sus escuderias.

Año Campeón Escudería
2013 Sebastian Vettel Red Bull Racing
2012 Sebastian Vettel Red Bull Racing
2010 Sebastian Vettel Red Bull Racing
2009 Jenson Button Brawn GP
2008 Lewis Hamilton McLaren
2007 Kimi Raikkonen Ferrari
2006 Fernando Alonso Renault
2005 Fernando Alonso Renault
2004 Michael Schumacher Ferrari
2003 Michael Schumacher Ferrari
2002 Michael Schumacher Ferrari
2001 Michael Schumacher Ferrari
2000 Michael Schumacher Ferrari

A continuación se presenta el código MySQL necesario para crear una tabla

CREATE TABLE f1 (
  year INT,
  campeon CHAR( 35 ) NOT NULL,
  escuderia CHAR( 35 ) NOT NULL,
  PRIMARY KEY ( year )
) ENGINE = InnoDB;

A continuación se presenta el correspondiente código PHP

<?php
   $query = "CREATE TABLE IF NOT EXISTS f1 (";
   $query .= "year INT NOT NULL , ";
   $query .= "campeon CHAR( 35 ) NOT NULL,";
   $query .= " escuderia CHAR( 35 ) NOT NULL , ";
   $query .= "PRIMARY KEY ( year ) ) ";
   $query .= "ENGINE = InnoDB;";
   include('ruta.php');
   $conexion = mysql_connect($ruta,$login,$password) or die(mysql_error());
   mysql_select_db( $db, $conexion ) or die(mysql_error());
  
   if (mysql_query($query, $conexion)){
      echo "Tabla creada con Éxito <br>";
   } else die(mysql_error());
   mysql_close($conexion);
?>

Ejemplo: Los XVI Juegos Panamericanos se llevaron a cabo del 14 al 30 de octubre de 2011, en la ciudad de Guadalajara, México. Ésta es la tercera vez que nuestro país organiza unos juegos panamericanos y la primera vez que se organizan fuera de la Ciudad de México. En esta actividad crearemos una tabla que contendrá el medallero de esta competencia.

<?php
  include('ruta.php');
  $query = 'CREATE TABLE IF NOT EXISTS panamericanos (';
  $query .= 'pais CHAR(35)NOT NULL,';
  $query .= ' oro  INT DEFAULT 0,';
  $query .= ' plata INT DEFAULT 0,';
  $query .= ' bronce INT DEFAULT 0,';
  $query .= ' total INT DEFAULT 0,';
  $query .= ' PRIMARY KEY ( PAIS ) ) ENGINE = InnoDB;';
  $conexion = mysql_connect( $ruta, $login, $password)
                             or die(>mysql_error());
  mysql_select_db( $db, $conexion ) or die(>mysql_error());
  mysql_query($query, $conexion) or die(>mysql_error());
  mysql_close($conexion);
?>

Insertar registros en una tabla.

La sentencia INSERT INTO es usada para agregar registros en una tabla de base de datos.

La sentencia tiene dos sintaxis genericas validas

INSERT INTO nombre_tabla
  VALUES (valor1, valor2, valor3,...)
INSERT INTO nombre_tabla (columna1, columna2, columna3,...)
   VALUES (valor1, valor2, valor3,...)

Ejemplo: Inserción de registros en MySQL con PHP usaremos el caso de Formula 1

<?php
   include("ruta.php");
   $conexion = mysql_connect( $ruta, $login, $password)
                or die(mysql_error());
   mysql_select_db( $db, $conexion ) or die(mysql_error());
   mysql_query("INSERT INTO f1 VALUES (2011,'Sebastian Vettel','Red Bull Racing')",
                 $conexion) or die(mysql_error());
   mysql_query("INSERT INTO f1 VALUES (2010,'Sebastian Vettel','Red Bull Racing')",
                 $conexion) or die(mysql_error());
   mysql_query("INSERT INTO f1 VALUES (2009,'Jenson Button Brawn','GP')",
                 $conexion) or die(mysql_error());
   mysql_query("INSERT INTO f1 VALUES (2008,'Lewis Hamilton','McLaren')",
                $conexion) or die(mysql_error());
   echo "Operación exitosa"; 
   mysql_close($conexion);
?>
>

Ejemplo: Medallero juegos Panamericanos Guadalajara 2011.

<?PHP
  include('ruta.php');
  $conexion = mysql_connect( $ruta, $login, $password) 
                             or die(mysql_error()); 
  mysql_select_db( $db, $conexion ) or die(mysql_error()); 
  $query = 'DELETE FROM panamericanos';
  mysql_query($query, $conexion) or die(mysql_error()); 
  $query = 'INSERT INTO panamericanos VALUES';
  $query .= "('Estados Unidos','usa.png',92,79,65,236),";
  $query .= "('Cuba','cuba.png',58,35,43,136),";
  $query .= "('Brasil','brasil.png',48,35,58,141),";
  $query .= "('México','mexico.png',42,41,50,133),";
  $query .= "('Canadá','canada.png',30,40,49,119),";
  ...
  $query .= "('Guyana','guyana.png',0,0,1,1),";
  $query .= "('Panamá','panama.png',0,0,1,1)";
  mysql_query($query, $conexion) or die(mysql_error()); 
  mysql_close($conexion); 
  echo 'Operación exitosa'; 
?>

Insertar registros en una tabla desde una forma

<?php
  if ( isset($_POST['aceptar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
    $year      = $_POST['year'];
    $campeon   = $_POST['campeon'];
    $escuderia = $_POST['escuderia'];
    if(!(isset($year) && !empty($year)
          && isset($campeon) && !empty($campeon)
          && isset($escuderia) && !empty($escuderia)
        )
      ) {
      echo "Todos los campos son necesarios";
    } else {
      $n = date('Y'); // Obtiene el año actual
      if ($year >= 1950 and $year <= $n) { //F1 inicio en 1950
         include('ruta.php');        
         $conexion  = mysql_connect( $ruta, $login, $password)
                                     or die(mysql_error());
         mysql_select_db( $db, $conexion ) or die(mysql_error());
         $query = "SELECT * FROM f1 WHERE year = $year";
         $registros = mysql_query($query, $conexion) or die(mysql_error());
         $n         = mysql_num_rows($registros);
         if($n == 0) {//Checamos que no exista información para ese año
           $query = "INSERT INTO f1 VALUES ($year, ";
           $query .= "'$campeon','$escuderia')";
           $resultado = mysql_query($query, $conexion);
           if(!$resultado) {
               echo 'Ocurrio un error al insertar'. mysql_error();
           } else echo 'Operación realizada con Éxito';
        } else echo 'Ya existe información para ese año'; //Un solo campeón por año
        mysql_close($conexion);
     } else echo 'Año fuera de rango'; 
    }
  }
?>

Mostrar el contenido de una tabla

La sentencia SELECT nos permite recuperar los registros de una tabla. La sintaxis básica es:

SELECT * FROM nombre_tabla WHERE condición

En el caso de una consulta usaremos básicamente las siguientes funciones

Ejemplo: Muestra los campeones de Formula 1 desde 1950 hasta el 2010.

<?php 
  $ruta      = 'localhost';
  $login     = '';
  $password  = '';
  $db        = 'f1';
  $conexion = mysql_connect( $ruta, $login, $password)
            or die(mysql_error());
  mysql_select_db( $db, $conexion ) or die(mysql_error());
  $query = "SELECT * FROM f1 ORDER BY year DESC";
  $registros = mysql_query($query, $conexion) 
             or die(mysql_error());
  $n = mysql_num_rows($registros);
  mysql_close($conexion);
  if ($n > 0) { // si hay registros 
  $html = '<h2>Campeones de Formula 1</h2>';
  $html.= '<table>';
  $html.= '<thead><th>Año</th><th>Campeón</th>';
  $html.= '<th>Escudería</th></tr></thead><tbody>';
  while ($registro = mysql_fetch_assoc($registros)) {
    $html.= '<tr>';
    $html.= '<td>'. $registro['year'].'</td>';
    $html.= '<td>'. $registro['campeon'].'</td>';
    $html.= '<td>'. $registro['escuderia'].'</td></tr>';
  } $html.= '</tbody></table>';
  echo $html; 
} ?>