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(); }

Ejemplo Arrays

Etiquetas: ,

Un array es una collecion de elmenetos. Es una de las estructuras de datos mas importantes de los lenguajes de programacion. A diferencia de otros lenguajes como C/C++ los vectores (asi se llaman es estos otros lenguajes) solo permiten arreglos/vectores con indices numérico.

Read More

Ejemplos de formularios

Etiquetas: ,

Voy a dar unos ejemplos de formulario. En cuanto a este tema hay mucha tela para cortar.
<input name="vehicle" type="checkbox" value="Car" /> I have a car 
<form action="html_form_action.asp" method="get" name="input">
Username: <input name="user" type="text" />
<input type="submit" value="Submit" />
</form>
<form action="">
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
</form

Read More

Seminario Optimizacion y performance LAMP

Etiquetas: , , , , ,

Los invito a participar en este seminario que se realizara en la Facultad de Ciencias Exactas de la U.N.T. (Av. Independencia 1800) en el Anfiteatro A2.

Read More

Se vienen las 2da Mini-Charlas, Tucuman Valley

Etiquetas:

El 2º ciclo de Minicharlas será para este próximo jueves 20 de Mayo a horas 20:00 en la Fundación del Tucumán.
Los temas a tratar serán:

  1. Cloud Computing
  2. Ruby on Rails

Pueden consultar mas informacion aquí: http://www.tucumanvalley.com/2010/05/17/2da-minicharla-tucuman-valley-temas-y-expositores/

Sesiones y subdominios en PHP

Etiquetas:

Alguna ves programando me tope con subdominio y sessiones.

El tema es que si iniciaba sesion poniendo http://misitio.com/ la sesion no valia, por ejemplo, para algun subdominio http://misubdominio.misitio.com/

El problema se resuelve rapidamente con setear a PHP correctamente para que las sesiones las cree para un dominio en general.

Hacemos al principio del script que se ejecutara en el subdominio:
ini_set("session.cookie_domain",".misitio.com");
No es necesarios que en los script que se ejecutaran en el dominio lleven eso, pero si en los scripts que se ejecutaran con un subdominio.
Esto hacemos en las paginas donde accedemos con un subdominio.

Mas informacion sobre ini_set(); en: http://www.php.net/manual/es/function.ini-set.php