WDL Demo Rss

Conexiones a MySQL desde PHP

¿Qué es la Extensión MySQL de PHP?

Esta es la extensión original que interactúa con bases de datos MySQL. La extensión mysql proporciona una interfaz procedural. Pensada para usar sólo con versiones de MySQL anteriores a la 4.1.3. Se puede utilizar con versiones de MySQL > 4.1.3 no estarán disponibles todas las nuevas funcionalidades de MySQL.

¿Qué es la extensión mysqli de PHP?

La extensión mysqli, o como a veces se le conoce, la extensión de MySQL mejorada, se desarrolló para aprovechar las nuevas funcionalidades encontradas en los sistemas MySQL con versión 4.1.3 o posterior. La extensión mysqli viene incluida en las versiones PHP 5 y posteriores.

Vamos a necesitar crear nuestra base de datos, tablas y registros. Para eso tenemos el siguiente script:

-- Creamos la base de datos
CREATE DATABASE  `blog` ;

-- Creamos una tabla autores
-- Clave primaria: id
-- Ademas al campo 'autor' solo permitiremos valores unicos

CREATE TABLE  `blog`.`autores` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `autor` VARCHAR( 128 ) NOT NULL ,
 PRIMARY KEY (  `id` ) ,
 UNIQUE (`autor`)
) ENGINE = MYISAM ;


-- Creamos la tabla entradas

CREATE TABLE  `blog`.`entradas` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `titulo` VARCHAR( 256 ) NOT NULL ,
 `contenido` TEXT NOT NULL ,
 `autor_id` INT NOT NULL ,
 `fecha` DATETIME NOT NULL ,
 PRIMARY KEY (  `id` ) ,
 UNIQUE (`titulo`)
) ENGINE = MYISAM ;


-- Insertamos un par de autores
INSERT INTO  `blog`.`autores` (`autor`) VALUES ('Luis Mender');
INSERT INTO  `blog`.`autores` (`autor`) VALUES (  'Juan Perez');

-- Insertamos registros en la tabla entradas
INSERT INTO  `blog`.`entradas` (`titulo`, `contenido`,`autor_id`,`fecha`) VALUES ('Segundo Post', 'Contenido del segundo post',1,TIMESTAMP());
INSERT INTO  `blog`.`entradas` (`titulo`, `contenido`,`autor_id`,`fecha`) VALUES ('Tercer Post', 'Contenido del tercer post',1,TIMESTAMP());
INSERT INTO  `blog`.`entradas` (`titulo`, `contenido`,`autor_id`,`fecha`) VALUES ('Cuarto Post', 'Contenido del cuarto post',2,TIMESTAMP());

Con la sentencia
TIMESTAMP()
lo que haces es imprimir en el campo la fecha y hora de creacion del registro.

Ahora podremos hacer consultas a nuestra base de datos 'blog':

// Creamos un objeto con el recurso a mysql, de la clase mysqli
$conexion = new mysqli('localhost','root','password','blog');

// Hacemos una consulta, y esta nos devuelve
// un objeto de la clase mysqli_result
$resultado = $conexion->query("select * from entradas");

/* array */
$filas = $resultado->fetch_array(MYSQLI_NUM);
echo "<pre>";
print_r($filas);

/* associative array */
$filas = $resultado->fetch_array(MYSQLI_ASSOC);
echo "<pre>";
print_r($filas);

/* associative and numeric array */
$filas = $resultado->fetch_array(MYSQLI_BOTH);
echo "<pre>";
print_r($filas);

/* liberamos la memoria */
$resultado->close();

/* Cerramos la conexion */
$conexion->close();


Ejemplo: Visualizamos datos extra como la cantidad de filas devueltas y filas afectadas.
Realizamos un bucle para acceder a cada fila y poder extraer la informacion.

// Habilitamos todos los errores y advertencias
error_reporting(E_ALL);

$conexion = new mysqli("localhost", "root", "password", "blog");

/* verificar conexion */

// Controlamos el numero de error
if (mysqli_connect_errno()) {
// Visualizamos la descripcion del error
echo "Error enconexion: ". mysqli_connect_error();
exit();
}

// Creamos la consulta
$sql = "SELECT * FROM entradas";

// Hacemos la consulta
$resultado = $conexion->query($sql)
// Si la consulta fue exitosa:
if ($resultado) {

 /* fetch array asociativo*/
 // Por cada fila mostramos el contenido del campo titulo
 while ($fila = $resultado->fetch_assoc()) {
  echo $fila["titulo"].'
';
 }
        // Mostramos el numero de filas afectadas que genera la consulta
 echo "El numero de filas afectadas es: ". $conexion->affected_rows . "
";
        // Mostramos la cantidad de filas devuelta por la consulta
 echo "El numero de filas devueltas es: ". $resultado->num_rows;
 
 /* liberamos la memoria asociada al resultado */
 $resultado->close();
}

/* cerramos la conexion */
$conexion->close();


Ejemplo de inserción en una tabla: Además obtenemos el último id generado. Esto siempre y cuando en mysql el campo id sea AUTO INCREMENT.

$sql = "INSERT INTO autores (`autor`) VALUES ('juan3')";

if ($resultado = $conexion->query($sql)) {
 echo "El id creado es: ". $conexion->insert_id;
 echo "Filas afectadas : ". $conexion->affected_rows;
}else
 echo "Hubo un error ".$conexion->errno." - ".$conexion->error;

/* cerramos la conexion */
$conexion->close();

Ahora un ejemplo de creacion de Base de datos:

$sql = "CREATE DATABASE test2 ;";

// Esta sentencia es para borrar la base de datos.
//$sql = "DROP DATABASE test2 ;";

if ($resultado = $conexion->query($sql)) {

 echo "Filas afectadas : ". $conexion->affected_rows;
}else
 echo "Hubo un error ".$conexion->errno." - ".$conexion->error;

/* cerramos la conexion */
$conexion->close();

Un último ejemplo de como obtener informacion de la tabla: Tipo de datos que tiene cada campo, que flags tienen cada campo (UNIQUE, AUTO INCREMENT, NOT NULL) Esta informacion puede ser útil a la hora de generar formularios automáticamente.

$query = "SELECT * from entradas";

// get the result from the DB


if ($result = $conexion->query($query)) {

    /* Get field information for all columns */
    $finfo = $result->fetch_fields();

    foreach ($finfo as $val) {
     echo "Name ".$val->name."
"; echo "Table ".$val->table."
"; echo "max. Len ".$val->max_length."
"; echo "Flags ".$val->flags."
"; echo "Type ".$val->type."
"; } $result->close(); }