Domingo 22 de Diciembre de 2024, 23:17
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
PHP
(Moderador:
F_Tanori
) »
Clase Query Conexión
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Clase Query Conexión (Leído 2974 veces)
RadicalEd
Moderador
Mensajes: 2430
Nacionalidad:
Clase Query Conexión
«
en:
Miércoles 12 de Agosto de 2009, 20:42 »
0
Les dejo esta clase que hicé para imprimir datos en tablas sin tener que estar haciendo redundancia.
Código: PHP
<?php
//Desarrollada por RadicalEd
class
SQL
{
//Constructor
function
SQL
(
$host
=
'localhost'
,
$db
=
'ancheteria'
,
$user
=
'usdist'
,
$password
=
'clio1214'
)
{
$this
->
database
=
mysql_connect
(
$host
,
$user
,
$password
)
or
die
(
"No se pudo conectar con el servidor"
.
mysql_error
(
)
)
;
@
mysql_select_db
(
$db
)
or
die
(
"No se pudo conectar a la db: "
.
mysql_error
(
)
)
;
}
//Esta función mostrará datos de una consulta simple
public
function
tabla
(
$query
,
$camposTabla
)
{
$tabla
=
'<table border="1" cellpadding="1" cellspacing="1"><tbody><tr>'
;
//Hay dos formas de recorrer el array, por for y por foreach
//acá mostraré ambas
for
(
$x
=
0
;
$x
<
count
(
$camposTabla
)
;
$x
++
)
{
$tabla
.=
'<td align="center"><strong>'
.
$camposTabla
[
$x
]
.
'</strong></td>'
;
}
$tabla
.=
'</tr>'
;
$result
=
mysql_query
(
$query
)
or
die
(
mysql_error
(
)
)
;
while
(
$row
=
mysql_fetch_array
(
$result
)
)
{
$tabla
.=
'<tr>'
;
//Recorriendo el array con foreach
foreach
(
$camposTabla
as
$campo
)
{
$tabla
.=
'<td>'
.
$row
[
$campo
]
.
'</td>'
;
}
$tabla
.=
'</tr>'
;
}
$tabla
.=
'</tbody></table>'
;
return
$tabla
;
}
//Este metodo mostrará datos de una consulta de varias tablas
public
function
tablaCompuesta
(
$query
,
$camposTabla
,
$camposDatos
)
{
$tabla
=
'<table border="1" cellpadding="1" cellspacing="1"><tbody><tr>'
;
for
(
$x
=
0
;
$x
<
count
(
$camposTabla
)
;
$x
++
)
{
$tabla
.=
'<td align="center"><strong>'
.
$camposTabla
[
$x
]
.
'</strong></td>'
;
}
$tabla
.=
'</tr>'
;
$result
=
mysql_query
(
$query
)
or
die
(
mysql_error
(
)
)
;
$numrows
=
mysql_num_rows
(
$result
)
;
$n
=
0
;
while
(
$n
<
$numrows
)
{
$tabla
.=
'<tr>'
;
foreach
(
$camposDatos
as
$campo
)
{
$tabla
.=
'<td>'
.
mysql_result
(
$result
,
$n
,
$campo
)
.
'</td>'
;
}
$tabla
.=
'</tr>'
;
$n
++;
}
$tabla
.=
'</tbody></table>'
;
return
$tabla
;
}
}
//EJEMPLOS DE UTILIZACION
//Arrays de los datos a mostrar
$arrayTabla
=
array
(
'TIPO'
,
'NUMERO'
,
'RUTERO'
)
;
$arrayDatos
=
array
(
'TIPO'
,
'NRO'
,
'RUTE'
)
;
//Consulta compuesta de varias tablas
$query
=
'SELECT con.tipo_dcto AS '
.
$arrayDatos
[
0
]
.
', con.nro_dcto AS '
.
$arrayDatos
[
1
]
.
', con.fk_rutero AS '
.
$arrayDatos
[
2
]
.
'
FROM tbsdpel_rutero AS rut, tbsdpel_content AS con
WHERE con.nro_dcto LIKE "19329" AND con.tipo_dcto LIKE "RO" AND con.fk_rutero=rut.id_rutero'
;
$datos
=
new
SQL
(
$host
=
'localhost'
,
$db
=
'paginafiles'
,
$user
=
'usdist'
,
$password
=
'clio1214'
)
;
$tabla
=
$datos
->
tablaCompuesta
(
$query
,
$arrayTabla
,
$arrayDatos
)
;
echo
$tabla
;
$nuevo
=
array
(
'id'
,
'codigo'
,
'nombre'
)
;
$datos
=
new
SQL
(
)
;
$tabla
=
$datos
->
tabla
(
'SELECT * FROM tbancheteria_proveedores'
,
$nuevo
)
;
echo
$tabla
;
?>
Tweet
El pasado son solo recuerdos, el futuro son solo sueños
grandzam
Miembro MUY activo
Mensajes: 118
Re: Clase Query Conexión
«
Respuesta #1 en:
Jueves 13 de Agosto de 2009, 08:45 »
0
Hola, he visto tu clase, y pues solo dos cosas:
1.- No mezcles PHP con HTML
. Busca sobre Smarty
2.- La clase esta mezclada con cosas de todo. Por ejemplo, una clase para crear conexiones (podrías usar Singleton), otra clase que se encargue del HTML, otra de construir consultas... etcétera. De esa manera haces tus clases más reutilizables.
Espero te agraden mis recomendaciones.
RadicalEd
Moderador
Mensajes: 2430
Nacionalidad:
Re: Clase Query Conexión
«
Respuesta #2 en:
Jueves 13 de Agosto de 2009, 16:10 »
0
He visto smarty, no es por nada pero me parece una #$%&/(" no me ha gustado trabajar con él en CRM de Sugar, del resto pues me tocaría ver como es, además es una clase sencilla para proyectos sencillos nada más.
Gracias por tú apore.
El pasado son solo recuerdos, el futuro son solo sueños
shakka
Miembro HIPER activo
Mensajes: 679
Nacionalidad:
Re: Clase Query Conexión
«
Respuesta #3 en:
Jueves 13 de Agosto de 2009, 23:05 »
0
Bien si revuelve tu problema Edo, gracias por el aporte.
Lo de evitar mezclar PHP con HTML, no lo veo tan serio. probablemente se referia a mezclar una capa de presentacion con datos del modelo, es decir aceso de base de datos con HTML.
Porque no estoy de acuerdo con respecto a evitar mezclar PHP con HTML? Porque para mi forma de trabajar utilizando un patron MVC donde las plantillas que uso no requieren un framework de MAS para hacer ese trabajo, si desde PHP lo puedo hacer sin agregar mas overhead a la aplicacion, quedando aun lejible.
Los shortags se los activo al vuelo
Código: Text
<? if ($prd != NULL) { ?>
<strong>Producción</strong>
<div>
<table>
<thead>
<tr>
<th>Cantidad</th>
<th>Descripción</th>
<th>Precio total ivi**</th>
<th>Moneda</th>
</tr>
</thead>
<tbody>
<?foreach ($prd as $i):?>
<tr>
<td><?=number_format($i['amount'], 2)?></td>
<td><?=$i['show_oq']?></td>
<td><?=number_format($i['price'], 2)?></td>
<td><?=$i['money']?></td>
</tr>
</tbody>
</table>
</div>
<? } ?>
blog
http://blog.mbrenes.com
shadow_rev
Miembro MUY activo
Mensajes: 397
Nacionalidad:
Un SPARTAN no muere en combate
Re: Clase Query Conexión
«
Respuesta #4 en:
Viernes 14 de Agosto de 2009, 16:30 »
0
Bueno, PHP embebido en HTML es una mala práctica cuando le pones la lógica del negocio, pero es perfecto cuando utilizas el MVC (Modelo Vista - Controlador), sobre todo cuando trabajas con diseñadores gráficos que no tienen idea de PHP, tal y como dice shakka. De hecho, symfony lo propone así.
Con respecto a la clase que publicó Edo, se puede mejorar si lo haces con
PDO
, para que funcione con cualquier motor de base de datos, y te ahorras la fachada. Apenas tenga tiempo, pongo el script de Edo funcionando con PDO, si me das permiso, claro
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas
RadicalEd
Moderador
Mensajes: 2430
Nacionalidad:
Re: Clase Query Conexión
«
Respuesta #5 en:
Viernes 14 de Agosto de 2009, 16:33 »
0
Claro, por ahí derecho aprendo.
El pasado son solo recuerdos, el futuro son solo sueños
shadow_rev
Miembro MUY activo
Mensajes: 397
Nacionalidad:
Un SPARTAN no muere en combate
Re: Clase Query Conexión
«
Respuesta #6 en:
Domingo 16 de Agosto de 2009, 02:42 »
0
Bueno, después de una noche de viernes viendo manga
, y toda una tarde de sábado jugando con el DS
, aquí les dejo el script con PDO:
Código: PHP
<?php
// Desarrollada por RadicalEd
// Modificado por shadow_rev
class
SQL
{
//Constructor
// function SQL($host='localhost', $db='ancheteria', $user='usdist', $password='clio1214')
var
$database
;
function
SQL
(
$string_conexion
)
{
// Así se conecta con una base de datos MySQL
//$this->database = mysql_connect($host, $user, $password) or die("No se pudo conectar con el servidor".mysql_error());
//@mysql_select_db($db) or die( "No se pudo conectar a la db: " . mysql_error());
// Con PDO (PHP >= 5.2), se conecta de esta forma
$this
->
database
=
new
PDO
(
$string_conexion
)
;
}
//Este metodo mostrará datos de una consulta de varias tablas
public
function
tablaCompuesta
(
$query
,
$camposTabla
,
$camposDatos
)
{
$tabla
=
''
;
try
{
$tabla
=
'<table border="1" cellpadding="1" cellspacing="1"><tbody><tr>'
;
for
(
$x
=
0
;
$x
<
count
(
$camposTabla
)
;
$x
++
)
{
$tabla
.=
'<td align="center"><strong>'
.
$camposTabla
[
$x
]
.
'</strong></td>'
;
}
$tabla
.=
'</tr>'
;
//$result = mysql_query($query) or die(mysql_error());
// Prepara la consulta
$result
=
$this
->
database
->
prepare
(
$query
)
;
// Ejecuta la consulta
$result
->
execute
(
)
;
// Obtiene TODO el conjunto de datos
$result_array
=
$result
->
fetchAll
(
)
;
$n
=
0
;
foreach
(
$result_array
as
$row
)
{
$tabla
.=
'<tr>'
;
foreach
(
$camposDatos
as
$campo
)
{
//$tabla .= '<td>'.mysql_result($result,$n,$campo).'</td>';
$tabla
.=
'<td>'
.
$row
[
$campo
]
.
'</td>'
;
}
$tabla
.=
'</tr>'
;
$n
++;
}
$tabla
.=
'</tbody></table>'
;
}
catch
(
PDOException
$pdoe
)
{
echo
"Error en la consulta: "
.
$pdoe
->
getMessage
(
)
.
"<br />"
;
}
return
$tabla
;
}
}
// Ejemplo de uso
//Arrays de los datos a mostrar
$arrayTabla
=
array
(
'NOMBRE'
,
'TELEFONO FIJO'
,
'TELEFONO MOVIL'
)
;
$arrayDatos
=
array
(
'nombre'
,
'telefono_fijo'
,
'telefono_movil'
)
;
//Consulta compuesta de varias tablas
$query
=
'SELECT name AS '
.
$arrayDatos
[
0
]
.
', telefono AS '
.
$arrayDatos
[
1
]
.
', celular AS '
.
$arrayDatos
[
2
]
.
' FROM telefonos, usuarios WHERE usuarios.id=telefonos.id_usuario'
;
$datos
=
new
SQL
(
'sqlite:/home/raulerne/public_html/test/database.sq3'
)
;
$tabla
=
$datos
->
tablaCompuesta
(
$query
,
$arrayTabla
,
$arrayDatos
)
;
echo
$tabla
;
?>
Yeap, hace falta una función, pero no la vi necesaria. De hecho, ¿Por qué lo hiciste así Edo?
PD: Si tienen dudas sobre el string de conexión, consulten la documentación de los
drivers de PDO
. Allí aparece el formato que debe tener el string para conectarse con diferentes bases de datos.
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
PHP
(Moderador:
F_Tanori
) »
Clase Query Conexión