Inicio

viernes, 16 de septiembre de 2011

Consulta con WHERE y LIKE

Siguiendo con los tipos de consulta que podemos realizar a nuestra BD , puede surgir la necesidad de filtrar la misma bajo ciertos criterios. Supongamos que deseamos recuperar aquellas entradas de nuestro ejemplo que cuyos nombre comiencen por la letra J. Necesitamos echar mano de la sintáxis SQL y emplear los operadores WHERE (donde) y LIKE(como). Veamos el ejemplo:
<html>
<head>
       <title>Petición a BD con WHERE</title>
</head>

<body>
Solicitud de nombre de personas que empiecen por la letra "J".<br>
<?php
//realizando la conexión
mysql_connect("localhost","root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

//obteniendo un resultado específico de la tabla example
$resultado=mysql_query("SELECT * FROM example WHERE nombre Like 'J%'" ) or die(mysql_error());
$num_rows = mysql_num_rows($resultado);
echo "Se han encontrado en total $num_rows nombres<br>";
while($row = mysql_fetch_array($resultado)){
// Presentando los resultados

echo $row['nombre']." -> ".$row['edad']."<br>";
}

?>
</body>
</html>

He resaltado la sentencia en negrita para explicarla. Con la misma solicitamos todos aquellos datos de la tabla "donde" nombre sea "como" J más los datos que sigan.
Un resumen de estos comodines:
EjemploDescripción
LIKE 'A%'Todo lo que comience por A
LIKE '_NG'Todo lo que comience por cualquier carácter y luego siga NG
LIKE '[AF]%'Todo lo que comience por A ó F
LIKE '[A-F]%'Todo lo que comience por cualquier letra comprendida entre la A y la F
LIKE '[A^B]%'Todo lo que comience por A y la segunda letra no sea una B
Por último con la sentencia que reescribo más abajo contamos el número de filas que devuelve  la consulta:
$num_rows = mysql_num_rows($resultado);

Recuperando listado de datos

Supongamos ahora que deseamos realizar un listado por pantalla de todos los datos que tengamos en una tabla. Para ello y, utilizando los datos de nuestro ejemplo, vamos a presentar un ejemplo de como podemos hacerlo:
</head>
<body>
<?php
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";
echo"<br>";
echo"<hr>";
echo"Datos de la petición a las ".date("H:i:s")."<br>";
// realizando la conexión
$query = "SELECT * FROM example";

$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

?>
</body>
</html>

He incluido algunos complementos para hacer la tabla más presentable.Por ejemplo la fecha actual en la cabecera:
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
Después los códigos para la conexión a la base de datos y tabla del ejemplo:

mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";

Conformamos la tabla de presentación, realizamos la petición con while... y presentamos los resultados:
$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

El resultado sería este:

 

sábado, 10 de septiembre de 2011

Insertando datos desde un formulario

El siguiente paso después de haber visto como acceder y leer datos de una BD en MySQL será estudiar como conseguir insertar datos mediante un formulario HTML. Para ello necesitaremos dos ficheros, el primero un archivo con el formulario necesario para recoger los datos puede ser este:
<html>
<head>
<title>Formulario HTML</title>
</head>
<body>
<form action="insert.php" method="post">
<label>Nombre:</label>
<input type="text" name="nombre_form">
<label>Edad: </label>
<input type="text" name="edad_form">
<input type="submit"><input type="reset">
</form>
</body>
</html>

El fichero insert.php nos va a hacer todo el procesamiento de insertar los datos generando los mensajes de errores pertinentes si hay algún fallo:
<?php
// Crear conexión a la Base de Datos
$conexion = mysql_connect("localhost","root");
if (!$conexion) {
die("Fallo la conexión a la Base de Datos: " . mysql_error());
}
//Seleccionar la Base de Datos a utilizar
$seleccionar_bd = mysql_select_db("directorio", $conexion);
if (!$seleccionar_bd) {
die("Fallo la selección de la Base de Datos: " . mysql_error());
}
//Tomar los campos provenientes del Formulario
$nombre = $_POST['nombre_form'];
$edad = $_POST['edad_form'];
// Insertar campos en la Base de Datos
$insertar = mysql_query("INSERT INTO example (nombre, edad)
VALUES ('{$nombre}', '{$edad}')", $conexion);
if (!$insertar) {
die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
}
// Cerrar conexión a la Base de Datos
mysql_close($conexion);
echo "Se ha insertado el siguiente dato NOMBRE: ".$nombre." EDAD: ".$edad." años."
?>

Es similar al código visto en post anterior salvo que recogemos los valores de las variables $_POST.

Recuperando datos de una tabla

En el presente post vamos a ver como recuperar datos de una tabla de nuestra base de datos. La lógica sigue siendo la misma sólo que con algunos añadidos. Primero debemos conectarnos a MySQL, después seleccionar la base que nos interesa. Realizamos la petición con una sentencia SQL presentamos los datos por pantalla.

Ejemplo:

<?php
// Conexión a MySQL
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

// Recuperando datos de la tabla example
$resultado = mysql_query("SELECT * FROM example")
or die(mysql_error()); 

//almacenamos la petición en la variable $row
$row = mysql_fetch_array( $resultado );
// Presentamos los datos

echo "Nombre: ".$row['nombre'];
echo " Edad: ".$row['edad'];

?>


Crear una tabla

Una vez que ya tenemos creada nuestra base veamos como podemos insertar una tabla con los campos correspondientes, para ello usaremos la sintáxis siguiente:
CREATE TABLE nombre_tabla
(
columna_nombre1 tipo_dato,
columna_nombre2 tipo_dato,

....
)

Ejemplo: vamos a crear una tabla a la que llamará "example" en la BD DIRECTORIO.
<?php
// Conexión a MySQL
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("DIRECTORIO") or die(mysql_error());

// Creando una tabla en nuestra BD
mysql_query("CREATE TABLE example(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
 nombre VARCHAR(30),
 edad INT)")
 or die(mysql_error()); 

echo "Tabla creada!";

?>

Podrá comprobar que una vez efectuada la conexión, debemos seleccionar la base de datos sobre la que vamos a actuar. Una vez que le hemos selecionado mysql_select_db("DIRECTORIO") or die(mysql_error()); procedemos a crear la tabla con una petición o query en la sintáxis SQL. 
mysql_query("CREATE TABLE example( argumentos serían los campos , el campo id es de tipo integer (int) no nulo y tipo autoincremento. Además ya hemos indicado que es nuestra llave primaria. El campo nombre es de tipo varachar al que necesariamente le debemos indicar entre paréntesis su longitud. Bien en el siguiente post analizaremos como insertar datos en una tabla y como hacerlo además mediante un formulario.

Crear una nueva base de datos

Es muy importante tener los privilegios necesarios para acceder a MySQL y poder conectar,crear y modificar bases de datos. Para ello desde menú general accedemos a la petaña Privilegios:
 Posteriormente editaremos los privilegios de nuestra cuenta:


Marcaremos las opciones que nos interese y finalizaremos con Continuar.

El código asociado para crear una base de datos sería el siguiente:

<?php
$con = mysql_connect("localhost","root");
if (!$con)
  {
  die('No se pudo conenectar a la base de datos ' . mysql_error());
  }

if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo "Bases de datos creada";
  }
else
  {
  echo "Error creando base de datos" . mysql_error();
  }

mysql_close($con);
?>


Como podrá comprobar el código no ostenta mucha complicación, una vez conectado si no ha habido errores, creamos nuestra base de datos con la línea:

mysql_query("CREATE DATABASE my_db",$con)

El resto no  es más que un bucle que nos manda un mensaje en caso de error.

lunes, 5 de septiembre de 2011

Conexión a MySQL

Buena parte de la efectividad de MySQL tiene que ver con la seguridad que ofrece. MySQL ofrece la posibilidad de administrar permisos a usuarios individuales o a grupos. Por lo pronto no vamos a entrar en explicar este punto, sino que vamos a entrar a comprender y trabajar con la interrelación de PHP y MySQL.
Lo primero que debemos hacer a la hora de programar es establecer una CONEXION con el servidor.Para ello necesitamos enviar como parámetros la dirección de nuestro servidor, el usuario y la contraseña. Veamos:

<?
$miservidor='localhost';
$miusuario='';
$micontraseña='';
$bd="ejemplo";
//conexión al servidor
$conexion=mysql_connect($miservidor,$miusuario,$micontraseña);
//selección de mi base de datos
mysql_select_db($bd,$conexion);
//cierra la conexion
mysql_close($conexion);
?>


El código es fácil de comprender, en principio nos apoyamos en la función mysql_connect(servidor,usuario,contraseña) con esos argumentos, después hemos de indicarle al navegador la base de datos con la que vamos a trabajar. Por último con mysql_connect cerramos la conexión.

Podemos diseñar una clase reutilizable para todos nuestros proyectos en que precisemos conectarnos a nuestra BD:

<?
class sevidor_BD
{
private $servidor;
private $usuario;
private $pass;
private $BD;
private $conexion;
function_construct($servidor,$usuario,$pass,$BD)
{
    $this->sevidor=$sevidor;
    $this->usuario=$usuario;
    $this->pass=$pass;
    $this->BD=$BD;
    $this->conectar_BD();
}
private function conectar_BD();
{
    $this->conexion=mysql_connect($this->servidor,$this->usuario,$this->pass);
    mysql_select_db($this->BD,$this->conexion);}
}
}
$servidor="localhost";
$usuario="";
$pass="";
$BD="ejemplo";
$usuario=new;
$servidor_BD($servidor,$usuario,$pass,$BD);
?>