Consultas PHP
Consultas PHP
Consultas PHP
En esta ocasin aprenders de forma sencilla como programar en php una consulta
a tu base de datos (recuerda estamos trabajando con mysql, php y apache). Si tienes que entregar un proyecto
pronto, si tienes que terminar esa tarea a entregar, si quieres sobresalir en la clase o bien estas aprendiendo a
programar en php, esto te ayudara, es como un mini tutorial para realizar consultas.
Si has tomado la decisin de aprender a programar en php para dedicarte a desarrollar proyectos como
freelance y obtener ingresos extras, ten por seguro que las tareas mas solicitadas son las consultas a una
bases de datos, por ejemplo: cuando tienes que obtener informacin especfica de un producto o bien cuando
necesitas mostrar informacin en tu pgina de inters para el visitante.
De echo si estas desarrollando una base de datos para un proyecto escolar ten por seguro que mientras mas
eficiente sean tus consultas mejor ser tu ponderacin en la calificacin, las bases de datos que mayor xito
tienen son las que entregan mejores resultados en las consultas.
Vamos pues a explicar paso a paso como puedes realizar una consulta, antes recuerda tener instalado el
apache, el php y el mysql si an no los tienes revisa mis artculos anteriores hay detallo de donde descargarlo,
como instalarlo y configurarlo.
Explico el contexto, tengo una base de datos llamada almacen y en ella he creado una tabla con los siguientes
campos y que se llamaproductos (id, codigo, nombre, precio, existencia), en el phpmyadmin de localhost;
lee los artculos anteriores para que veas como se configura y dentro de ella he insertado los siguientes
registros: (Null, 1234, producto 1, 12, 34) y (Null, 3456, producto 3, 34, 45).
Paso 1: Generamos el documento html que contendr el formulario del cul pedimos la consulta, en este ejemplo
la consulta nos regresa el nombre, el precio y la existencia filtrado por el cdigo del producto, as que mi
formulario solo contiene dos elementos (el cuadro de texto para el cdigo del producto y el botn que ejecuta la
consulta), lo llame form_consulta.html:
<?php
/* http://programarenphp.wordpress.com*/
Si te interesa descargar este ejemplo los puedes obtener dando click aqu.
http://programarenphp.wordpress.com/2010/11/02/como-hacer-una-consulta-en-php-y-mysql/
COMO REALIZAR UNA CONSULTA A TRES TABLAS CON UNA SOLA SENTENCIA SQL
Si te estas preguntando, qu hay en este artculo? Lo mismo o aqu si aprender lo que busco?, pues
djame adelantarte.Con un ejemplo prctico te voy a explicar paso a paso como t puedes realizar la
consulta a dos o mas tablas con una sola sentencia de SQL. Interesante verdad?, estoy seguro que con este
ejemplo no tendrs que buscar mas en internet y teahorraras tiempo que podrs usar para divertirte. No
me crees?, lee completo este articulo y al final me dejas tu comentario.
Antes de iniciar permteme un consejo, si de verdad deseas aprender a programar en php ya, al principio
crea siempre todos tus cdigos, es decir, no solo los descargues y los adaptes a tus necesidades, si no que
trascrbelos a mano y veras como tu aprendizaje se acelera.
Para este ejemplo es necesario que ya tengas configurada una base de datos con las siguientes
caractersticas:
Es importante, para este ejemplo que veas la estructura, pero puedes bajar el archivo sql dando click en este
enlace, luego importas este archivo a tu base de datos (ojo el archivo SQL ya lleva algunos registros para ver
como funciona el siguiente cdigo).
<html>
<head>
<title>APRENDE A PROGRAMAR EN PHP ya!!</title>
</head>
<body>
<form name=producto method=post action=<?php echo $PHP_SELF; ?>>
Selecciona el producto:
<select name=producto>
<?php
$con = mysql_connect(localhost,root,pass) or die
(Error al conectar con MySQL.mysql_error());
mysql_select_db(tiendacds,$con) or die
(Error al seleccionar BD.mysql_error());
/* obtenemos los productos para mostrarlos en un combo-box */
$sql = SELECT nombre,codigo FROM productos ORDER BY nombre ASC;
$result = mysql_query($sql) or die (ERROR AL CARGAR LOS PRODUCTOS .mysql_error());
while ($campo = mysql_fetch_array($result))
echo <option value=$campo[codigo]>$campo[nombre]</option>;
?>
</select>
<input type=submit name=enviar value=Ver Reporte />
</form>
<?php
extract($_POST);
if (isset($producto)){
/////////////////////////////////////////////////////////////////////////////
//// AQUI LA SENTENCIA SQL ////////////////////////////////////////////////
$sql = SELECT productos.nombre AS np,productos.precio,cajeros.nombre,ventas.fecha,
ventas.cantidad FROM productos,cajeros,ventas WHERE ventas.codigo_producto=$producto AND
Si buscas como realizar una consulta a dos o mas tablas supongo que ya sabes cdigo HTML y ya sabes como mostrar los
resultados regresados por una consulta, as que solo me voy a enfocar a la sentencia SQL: SELECT productos.nombre
AS np, productos.precio, cajeros.nombre, ventas.fecha,ventas.cantidad FROM productos,cajeros,ventas WHERE
ventas.codigo_producto =$producto AND productos.codigo = ventas.codigo_producto AND cajeros.id =
ventas.id_cajeros.
La explico: despus del SELECT anoto los campos que necesito consultar anteponindole un punto y el
nombre de la tabla al que pertenecen, luego despus de FROM van las tres tablas implicadas separadas por
comas. Ya para obtener el resultado deseado debes filtrar con la clusula WHERE cuidando de utilizar
apropiadamente los campos que se relacionan en cada tabla. La siguiente imagen es una captura de
pantalla del cdigo en ejecucin.
Inicie su utilidad phpAdmin y crear una nueva tabla de MySQL para albergar los datos del producto. Nombre de la
tabla , "productos" , y colocar un campo en la tabla para cada elemento que desea que aparezca en el catlogo
de productos. Por ejemplo , estudiar cuidadosamente el siguiente ejemplo de comando SQL . Puede introducir
este comando en la lnea de comandos SQL de su utilidad phpAdmin . El comando inicia una nueva tabla de
productos y crea una identificacin, descripcin, upcNumber , nombre, precio, imagen y campo de marca de
tiempo.
) ENGINE = MYISAM
2
Rellenar los nuevos campos de datos con la informacin del producto . Coloque la informacin de cada producto
en el campo correspondiente . Usted puede hacer esto a mi hacer clic en el botn "Insertar " de la utilidad
phpAdmin . Por ejemplo , se debe colocar el nombre del producto en el campo del producto , nmero de UPC del
producto en el campo upcNumber y el nombre del archivo de la imagen de cada producto en el campo de la
imagen.
3
Recuperar los datos del catlogo utilizando PHP. PHP recupera la descripcin de cada producto de la base de
datos y muestra los datos en las que puede ser visto por los visitantes de su sitio. En este cdigo de ejemplo,
PHP consulta la base de datos utilizando la funcin mysql_query , coloca los datos de cada producto en una
matriz, recorre la matriz y asigna a cada elemento de datos del producto en una variable correspondiente.
mysql_connect ( "localhost ", " nombredeusuario ", " sucontrasea ") or die ( mysql_error ());
>
4
impresin y el estilo de la salida de PHP con reglas CSS . En este ejemplo, estilos de imagen de presentacin de
cada producto para el visitante del sitio utilizando una regla CSS en lnea . La imagen ha sido flotado hacia la
izquierda, el nombre del producto ha sido colocado dentro de una etiqueta H1, el nmero UPC muestra dentro de
un tag H4, el precio del producto aparecer como H5 ttulo y la descripcin del producto aparecer en una
etiqueta de prrafo .
< img src = "< php echo $ imageFile ; ? >" /> < /div >
Coloque la salida de estilo dentro de loop array de cada producto. Esto mostrar una ocurrencia para cada
producto obtenido de la base de datos . El cdigo PHP completado ahora el siguiente aspecto
< php
mysql_connect ( "localhost ", " nombredeusuario ", " sucontrasea ") or die ( mysql_error () ) . ?
>
; < img src = "< php echo $ imageFile ; ? >" /> < /div >
< php
>
http://aprendeaprogramarenphpya.com/blog/como-realizar-una-consulta-a-tres-tablas-con-una-sola-sentencia-sql.html#more-
230
http://ordenador.wingwit.com/Programacion/php-mysql-programming/93181.html
Veremos algunas funciones bsicas para acceder a una base de datos MySQL desde PHP para recuperar
informacin, insertar informacin o borrar informacin.
Una cuestin a comentar es que el acceso a base de datos con PHP admite dos formas distintas: las funciones tipo
mysql, por ejemplo mysql_connect, son las ms antiguas, cuyo uso se desaconseja si se est trabajando con un
servidor con una versin de MySql moderna. Las funciones tipo mysqli, por ejemplo mysqli_connect, son las ms
modernas, cuyo uso se recomienda siempre que se est trabajando con servidores actualizados. Las funciones
mysqli pueden escribirse de dos formas: con estilo orientado a objetos o con estilo por procedimientos. Nosotros
vamos a ver cmo usar estas funciones con el estilo por procedimientos, que es ms sencillo inicialmente.
La funcin devuelve una conexin almacenada en la variable $nombreConexion, o FALSE en caso de error. Los parmetros
que hemos indicado son:
$hostname es un nombre de servidor (dato que debemos consultar en nuestra cuenta de hosting).
$nombreUsuario es el nombre de usuario de base de datos, nombre que habremos especificado al crear la base de datos (si
no lo hemos hecho, puede ser el mismo que para acceder a cPanel root).
$contrasea es la contrasea de acceso para el usuario de base de datos, contrasea que habremos especificado al crear la
base de datos (si no lo hemos hecho, puede ser la misma que para acceder a cPanel root).
Esta funcin nos permite cerrar la conexin con una base de datos anteriormente abierta. Siempre es recomendable cerrar una
conexin cuando hayamos terminado de usarla.
mysqli_close($nombreConexin);
Para servidores no actualizados usar mysql_close en lugar de
mysqli_close
El identificador o nombre de conexin ser aquel que hayamos obtenido previamente usando la funcin mysqli_connect.
Esta funcin nos permite seleccionar una base de datos concreta dentro de todas las existentes en el servidor al que nos
conectemos.
El nombre de conexin ser aquel que hayamos obtenido previamente con la funcin mysqli_connect.
Esta funcin nos permite ejecutar una consulta a la base de datos que especifiquemos.
Donde "Consulta aqu" se refiere a una consulta realizada utilizando el lenguaje SQL de consultas a bases de datos, por
ejemplo una consulta puede ser "SELECT * FROM agenda", que podra traducirse como selecciona todas las filas de la tabla
agenda.
Esta funcin devuelve TRUE o FALSE para indicar si las operaciones UPDATE, INSERT o DELETE han tenido xito. Para la
operacin SELECT devuelve un nuevo identificador de resultado. UPDATE significa actualizar, INSERT significa insertar y
DELETE significa BORRAR. SELECT significa seleccionar.
El nombre de conexin ser aquel que hayamos obtenido previamente con la funcin mysqli_connect.
Una sentencia de consulta normalmente devuelve un conjunto de resultados que segn el ejemplo de sintaxis anterior
tendramos en una variable denominada $result. Por ejemplo, podramos tener como resultados de una consulta lo siguiente:
Aqu estamos dando dos pasos: una sentencia como mysqli_data_seek ($result, 0); significara posicinate en la fila 0 de los
resultados (la primera fila). Tambin es vlido escribir $result->data_seek(0); que tiene el mismo efecto. Si escribiramos
$result->data_seek(15); signficara posicinate en la fila 16 de los resultados (tener en cuenta que se empieza a contar por
cero, de ah que 0, 1, 2, , 15 resulten 16 filas).
La sentencia $extraido= mysqli_fetch_array($result); indica que los valores existentes en la fila se introduzcan en un array
cuyos ndices en principio pueden ser tanto asociativos (el nombre de la columna) como numricos (empezanso por cero). Por
ejemplo si la primera columna en la tabla de la base de datos es <<ciudad>> podemos usar $extraido['ciudad'] para acceder
al valor existente en la fila con la que estemos trabajando para la columna ciudad. Igualmente podramos usar $extraido[0]
para referirnos a la primera columna, $extraido[1] para referirnos a la segunda columna, $extraido[2] para referirnos a la
tercera columna y as sucesivamente.
En servidores no actualizados se puede usar la funcin mysql_result aunque al no pertenecer a la serie de funciones mysqli no
est recomendado su uso.
Esta funcin nos devuelve el contenido de la celda en la fila y columna indicadas en forma de string (cadena de caracteres) en
caso de xito, o FALSE en caso de error.
numeroDeFila es un nmero de fila dentro del resultado obtenido teniendo en cuenta que los nmeros de fila se cuentan
empezando desde cero.
identificadorDeLaColumna puede ser el ndice del campo (por ejemplo 0), el nombre del campo (por ejemplo ciudad), o el
nombre de la tabla punto nombre del campo (por ejemplo agenda.ciudad)
Finalmente, se puede especificar el nombre del campo que queremos extraer dentro de la fila (esto es opcional). Esta funcin
la entenderemos mejor con el ejemplo que veremos a continuacin.
EJEMPLO DE USO DE LAS FUNCIONES ANTERIORES.
Escribe este cdigo en un editor y gurdalo en un archivo de nombre ejemplo1.php (recuerda que antes debes haber creado la
base de datos y creado datos de ejemplo como hemos visto anteriormente). Recuerda tambin que debes cambiar y poner tus
propios valores en las funciones mysqli_connect y mysqli_select_db.
<html><head><meta charset="utf-8"></head>
<body>
<?php
mysqli_select_db($link, "b7_10356956_mibasededatos");
$extraido= mysqli_fetch_array($result);
mysqli_free_result($result);
mysqli_close($link);
?>
</body>
</html>
<html>
<body>
<?php
mysql_select_db("b7_10356956_mibasededatos", $link);
echo"Telfono:".mysql_result($result, 0, "telefono")."<br>";
echo"Edad:".mysql_result($result, 0, "edad")."<br>";
echo"Altura:".mysql_result($result, 0, "altura")."<br>";
mysql_free_result($result);
mysql_close($link);
?>
</body>
</html>
En este cdigo lo que hemos hecho es usar las funciones vistas anteriormente y la base de datos y tablas que creamos en
anteriores apartados del curso. Con todo ello lo que hacemos es realizar una consulta a la base de datos y mostrar los
resultados por pantalla.
Con esta lnea introducimos el identificador de conexin en una variable denominada $link. Invocamos la funcin
mysqli_connect pasndole como parmetros el nombre del hosting, el nombre de usuario y la contrasea. Estos datos
debemos conocerlos (o consultarlos) previamente.
mysqli_select_db($link, "b7_10356956_mibasededatos");
Con esta lnea seleccionamos la base de datos pasndole a la funcin como parmetros el identificador de conexin (que
hemos obtenido y guardado en una variable previamente) y el nombre de base de datos.
Con esta lnea seleccionamos todos los registros (filas) y campos (columnas) existentes en nuestra base de datos. Para
seleccionar todos los registros escribimos SELECT *. A continuacin indicamos la tabla de la cual queremos obtener dichos
registros y esto lo expresamos con la sintaxis FROM agenda, siendo agenda el nombre de la tabla en la base de datos. En la
llamada a la funcin incluirmos el identificador de conexin que hemos obtenido previamente.
Con la sentencia mysqli_data_seek ($result, 0); nos posicionamos en la primera fila (fila cero) de los resultados de la consulta.
Con la sentencia $extraido= mysqli_fetch_array($result); introducimos en un array al que denominamos $extraido los datos de
la fila cero obtenidos de la consulta.
En la versin que no usa mysqli (no recomendada) con la sentencia mysql_result($result, 0, "nombre") obtenemos el campo
nombre del primer registro (registro 0) del resultado de la consulta que hemos almacenado previamente en $result.
El resultado de invocar el archivo que hemos creado ser que se nos muestre por pantalla el nombre, apellidos, direccin,
telfono, edad y altura almacenados en la primera fila de nuestra base de datos. Algo similar a esto:
Resumiendo lo que hemos hecho, hemos usado la funcin mysqli_connect(), que abre una conexin con el servidor MySQL en
el Host especificado (en este ejemplo la mquina donde est alojada el servidor MySQL es sql203.byethost7.com, pero t
tendrs que introducir tu propio dato). Tambin hemos especificado un usuario (b7_10356956 en este ejemplo, pero t
tendrs que introducir tu propio dato), y un password para el usuario indicado (tendrs que escribir tu password de usuario de
base de datos).
Si la conexin ha tenido xito, la funcin mysqli_connect() devuelve un identificador de dicha conexin que es almacenado en
la variable $link. Si no tuviera xito, devuelve 0 (FALSE).
Con mysqli_select_db() PHP le hemos dicho al servidor que en la conexin $link nos queremos conectar a la base de datos
indicada.
La siguiente funcin mysqli_query(), usando el identificador de la conexin ($link), enva una instruccin SQL al servidor MySQL
para que ste la procese. El resultado de sta operacin es almacenado en la variable $result.
Finalmente, elegimos la fila de resultados cero con mysqli_data_seek ($result, 0); y guardamos los resultados de esa fila en un
array con $extraido= mysqli_fetch_array($result); . Si quisiramos mostrar los siguientes registros tendramos que incluir
instrucciones con los nmeros 1, 2,
http://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=612:php-consultas-mysql-
mysqliconnect-selectdb-query-fetcharray-freeresult-close-ejemplos-cu00841b&catid=70:tutorial-basico-programador-web-php-
desde-cero&Itemid=193
FUNCIONES DE MYSQL
<body>
<div align='center'>
<table border='1' cellpadding='0' cellspacing='0' width='600' bgcolor='#F6F6F6' bo
rdercolor='#FFFFFF'>
<tr>
<td width='150' style='font-weight: bold'>ID</td>
<td width='150' style='font-weight: bold'>NOMBRE</td>
<td width='150' style='font-weight: bold'>E-MAIL.</td>
<td width='150' style='font-weight: bold'></td>
</tr>
<?php
include('abre_conexion.php');
</tr>
";
}
include('cierra_conexion.php');
?>
</table>
</div>
</body>
</html>
http://www.uterra.com/base_datos_mysql/codigo_mysql.php?ref=lectura_de_una_base_de_datos
// incluimos la conexin
require("conexion.php");
// creamos la consulta
Tambin se puede agregar una sentencia para mostrar si hay algn error en la conexin o consulta.
require("conexion.php");
echo $resEmp['nombre']."<br>";
Donde se puede ver que para acceder a cada campo del registro lo hacemos como un array donde le
pasamos el nombre del campo que deseamos acceder (En el ejemplo estamos mostrando todos los
nombres de las empresas consultadas).
Ahora, solo depende como deseamos mostrar los datos para modificar nuestro script. Por ejemplo si
deseamos mostrar los datos como una lista tendramos
<ul>
<?php } ?>
</ul>
Ahora tambin podramos mostrar los resultados en una tabla o datagrid, para ello modificamos nuestro
cdigo donde utilizaremos una tabla para mostrar en varias columnas los datos consultados.
<table>
<tr>
<th>Nombre</th>
<th>Direccin</th>
<th>Telfono</th>
</tr>
<?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
<tr>
</tr>
<?php } ?>
</table>
Crear un Buscador
Ahora, podramos crear un buscador bsico de empresas, para ello creamos un formulario para ingresar el
criterio de bsqueda.
</form>
Antes de continuar decidimos el tipo de consulta SQL que vamos a utilizar, en nuestro caso la bsqueda
ser por las primeras letras del nombre, para ello utilizaremos la sentencia LIKE explicada en el artculo PHP
con MySQL: Introduccin a SQL.
Luego, una vez enviado el formulario procedemos a recuperar los datos para proceder a crear la consulta y
enviarla a MySQL. Primero verificamos que se ha enviado un criterio de bsqueda luego creamos la
consulta no sin antes normalizar los datos (para prevenir ataques de inyeccin SQL), esto lo hacemos con la
funcin sqlValue que hemos creado en PHP con MySQL: Insertar datos en MySQL.
require("conexion.php");
require("funciones.php");
$total = 0;
if ($criterio != "") {
$query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre
ASC";
Ntese que estamos utilizando una variable $total donde se almacena el total de resultados devueltos por la
consulta. El total de resultados se obtiene con la funcin mysql_num_rows.
Finalmente mostramos los resultados al cliente, para ello verificamos que existan resultados en la consulta.
Uniendo todos los elementos tendramos:
<?php
require("conexion.php");
require("funciones.php");
$total = 0;
if ($criterio != "") {
$query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre
ASC";
$total = mysql_num_rows($queEmp);
?>
<html>
<head>
</head>
<body>
<h3>Buscador de Empresas</h3>
</form>
<table>
<tr>
<th>Nombre</th>
<th>Direccin</th>
<th>Telfono</th>
</tr>
<tr>
</tr>
<?php } ?>
</table>
<?php } ?>
<p> </p>
</body>
</html>
Como pueden ver no es complicado hacer consultas a MySQL, solo debemos crear la cadena con la
consulta SQL y luego enviarla utilizando la funcin mysql_query. Lo siguiente solo depende de como
deseamos mostrar la informacin resultante de nuestra consulta.
<?php
$conexion = mysql_connect("localhost", "root", "");
mysql_select_db("precios", $conexion);
El siguiente ejemplo muestra como visualizar todo el contenido de una tabla en una pgina
web. En concreto, se conecta al servidor local con el usuario wwwdata sin contrasea,
selecciona la base de datos biblioteca, recupera todo el contenido de la tabla libros y muestra
los campos Titulo y Resumen :
<?xml version="1.0" encoding="iso-8859-1"?>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
</head>
<body>
<?php
// Se conecta al SGBD
if(!mysql_select_db("biblioteca", $iden))
if(!$resultado)
echo '<table>';
while($fila = mysql_fetch_assoc($resultado))
echo '<tr>';
echo '</tr>';
echo '</table>';
mysql_free_result($resultado);
mysql_close($iden);
?>
</body>
</html>
El siguiente ejemplo es similar al anterior, pero emplea una funcin llamada sql_dump_result(resultado) que
visualiza todo el contenido del resultado de una consulta SELECT en forma de tabla de HTML, sin tener que
indicar uno a uno los campos que componen el resultado; adems, la primera fila de la tabla creada contiene los
nombres de los campos a modo de encabezados de las columnas de la tabla:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<?php
// Devuelve todas las filas de una consulta a una tabla de una base de datos
function sql_dump_result($result)
$line = '';
$head = '';
while($temp = mysql_fetch_assoc($result))
if(empty($head))
$keys = array_keys($temp);
// Se conecta al SGBD
if(!mysql_select_db("biblioteca", $iden))
if(!$resultado)
die("Error: no se pudo realizar la consulta");
echo sql_dump_result($resultado);
mysql_free_result($resultado);
mysql_close($iden);
?>
</body>
</html>