<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=ISO-8859-1>
<META content="MSHTML 6.00.2900.2802" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2>Amigos de la lista:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2>Al iniciar mi comentario pensaba tener razones mas que 
justificadas para mi forma de trabajo, pero ahora que lo pienso con mas 
detenimiento no estoy tan seguro.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2>Bien les expongo de que se trata.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2>Uno de los mayores peligros que enfrentamos cuando 
programamos en una Web es el tema de la conexión a una Vd., sobre todo cuando la 
información que estamos desplegando es lo suficiente grande para que se produzca 
un pequeño retardo en la consulta y el retorno de la 
información.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2>No falta quien&nbsp; por desgracia presionan la tecla F5 
reiteradas veces o la dejan presionada, en otras palabras se interrumpa la carga 
de la pagina con el propósito de generar una sobre carga de conexiones 
simultaneas.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2>Lo cual podrá permitir que se generen N -1 cantidad de 
conexiones simultaneas desde el mismo punto y si sumamos al menos dos tipos así 
haciendo esto al mismo tiempo, nuestro amado servidor no quedaría 
desprotegido...</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=750045918-10022006><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV><FONT face=Arial color=#0000ff 
size=2></FONT><BR>
<DIV class=OutlookMessageHeader lang=es dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>De:</B> php-bounces@listas.inf.utfsm.cl 
[mailto:php-bounces@listas.inf.utfsm.cl] <B>En nombre de </B>Rodrigo 
Fuentealba<BR><B>Enviado el:</B> 10-02-2006 15:09<BR><B>Para:</B> Lista de 
desarrolladores en PHP<BR><B>Asunto:</B> Re: Pool de conexiones en 
PHP<BR></FONT><BR></DIV>
<DIV></DIV>JuanPa wrote: 
<BLOCKQUOTE cite=mida9b983730602100539y487e39bau@mail.gmail.com type="cite">
  <DIV>
  <DIV>Hola listeros....<BR>Te agradezco nuevamente Rodrigo por dar tu valioso 
  tiempo aclarando mis dudas, <BR><BR>A raiz de es comentario es que he optado 
  por utilizar mis clasicas conexiones no persistentes 
<BR></DIV></DIV></BLOCKQUOTE>ejalé ;)<BR>
<BLOCKQUOTE cite=mida9b983730602100539y487e39bau@mail.gmail.com type="cite">
  <DIV><BR>
  <BLOCKQUOTE class=gmail_quote 
  style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Es 
    mejor usar conexiones no persistentes, es decir, abriendo la conexión<BR>al 
    principio de tu script y cerrando la conexión al final, pues siempre <BR>vas 
    a tener páginas que no hagan ninguna consulta a la base de datos...<BR>¿Para 
    qué, entonces, tendrás una conexión abierta? Es únicamente un<BR>desperdicio 
    de recursos.</BLOCKQUOTE>
  <DIV><BR>Ademas no voy a esperar que el GC (Garbage Colector) haga su trabajo, 
  una ultima cosa... <BR></DIV></DIV></BLOCKQUOTE>Bueno el recolector de basura 
funcionará igual, pero cerrando menos cosas.<BR>
<BLOCKQUOTE cite=mida9b983730602100539y487e39bau@mail.gmail.com type="cite">
  <DIV>
  <BLOCKQUOTE class=gmail_quote 
  style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Por 
    eso es mejor abrir la conexión al principio de un script y cerrarla<BR>al 
    final, y si tienes funciones que recuperan datos como el caso de tu 
    <BR>buscar alumno, en vez de abrir una conexión nueva, preguntes si ya 
    hay<BR>una conexión abierta para aprovecharla.</BLOCKQUOTE>
  <DIV><BR>Pero ¿ esto no significa que la conexion deberìa ser persistente? o 
  te refieres a que deberia pasar por parametros a mi objeto conexion que tiene 
  un recurso de conexion interno($link) y luego verificar si esta está abierta. 
  <BR></DIV></DIV></BLOCKQUOTE>Una conexión no persistente se abre al inicio de un 
archivo (supongamos insertar.php) y se debe cerrar al final de éste. Si tienes 
un archivo que se llama modificar.php, ese debe declarar otra conexión, pues la 
primera no estará.<BR><BR>La conexión persistente se abre al inicio de la sesión 
(mientras el usuario está conectado) y puede pasarse por varias páginas. Si 
tienes un archivo insertar, modificar, eliminar, buscar, etc, cuantoquieras.php, 
todos esos archivos usarán conexiones persistentes.<BR><BR>&lt;!-- leo de otro 
mail<BR>una conexion persistente permite re-utilizar una conexion ya abierta, 
ademas de tener que cerrarla explicitamente sino queda "abierta"! la idea es 
evitar el tiempo (milisegundos?) que se ocupa en "establecer" una conexion. su 
uso a mi entender esta reservado a sitios con muchas conexiones nuevas, con 
procesos cortos. <BR>-- leido --&gt;<BR><BR>Esto es cierto, yo dije "una vez por 
usuario/sesión", queriendo enfocar a que la conexión estaba abierta y podía ser 
aprovechada por varias páginas que visita un usuario desde un navegador. (pues 
una conexión se abre solamente para un usuario).<BR><BR>
<BLOCKQUOTE cite=mida9b983730602100539y487e39bau@mail.gmail.com type="cite">
  <DIV>Y finalmente cuando dices... <BR></DIV>
  <BLOCKQUOTE class=gmail_quote 
  style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Cualquiera 
    de las dos conexiones funciona así, la diferencia es que la <BR>persistente 
    la abres una vez por usuario (o por conexion?) ..<BR></BLOCKQUOTE>Esto 
  significa ¿ Que la conexion seguira abierta en cada script que valla 
  ejecutando el usuario, mientras no se cierre explicitamente en otro script o 
  cuando el usuario cierre el navegador ? <BR></BLOCKQUOTE>Ahhh, eso con ejemplo 
(ahora haré código real con adodb)... "notese, solamente una conexión no 
persistente"<BR><BR>&lt;?php<BR>&nbsp;&nbsp;&nbsp; echo("Abriendo la primera 
conexión")<BR>&nbsp;&nbsp;&nbsp; $conexion = 
ADONewConnection("postgres");<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;NConnect($host,$user,$pass,$base);<BR>&nbsp;&nbsp;&nbsp; $sql = 
$conexion-&gt;Prepare("SELECT * FROM alumno WHERE rut_alumno = 
?");<BR>&nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array('12345678-9'));<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;Close();<BR><BR>&nbsp;&nbsp;&nbsp; echo("Abriendo la segunda 
conexión");<BR>&nbsp;&nbsp;&nbsp; $conexion = 
ADONewConnection("postgres");<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;NConnect($host,$user,$pass,$base);<BR>&nbsp;&nbsp;&nbsp; $sql = 
$conexion-&gt;Prepare("SELECT * FROM apoderado WHERE rut_alumno = 
?");<BR>&nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array('12345678-9'));<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;Close();<BR><BR>&nbsp;&nbsp;&nbsp; $conexion = 
ADONewConnection("postgres");<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;NConnect($host,$user,$pass,$base);<BR>&nbsp;&nbsp;&nbsp; $sql = 
$conexion-&gt;Prepare("SELECT * FROM cuotas WHERE rut_alumno = 
?");<BR>&nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array('12345678-9'));<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;Close();<BR>?&gt;<BR><BR>El ejemplo anterior es un script 
demasiado mega mal hecho. Abres tres veces una conexión nueva y no destruyes las 
conexiones anteriores. Digamos que solamente las desconectas. Uhhh, en este 
pequeño script te gastaste tres conexiones. ¿Qué mal, no?. Pues ahora veamos 
cómo lo habría hecho con una sola conexión no 
persistente.<BR><BR>&lt;?php<BR>&nbsp;&nbsp;&nbsp; echo("Abriendo la 
conexión")<BR>&nbsp;&nbsp;&nbsp; $conexion = 
ADONewConnection("postgres");<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;NConnect($host,$user,$pass,$base);<BR><BR>&nbsp;&nbsp;&nbsp; 
dibujemos();<BR><BR>&nbsp;&nbsp;&nbsp; // con la misma conexion no persistente, 
puedes hacer UNA<BR>&nbsp;&nbsp;&nbsp; $sql = $conexion-&gt;Prepare("SELECT * 
FROM alumno WHERE rut_alumno = ?");<BR>&nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array('12345678-9'));<BR><BR>&nbsp;&nbsp;&nbsp; 
juguemos_en_el_bosque();<BR><BR>&nbsp;&nbsp;&nbsp; // DOS<BR>&nbsp;&nbsp;&nbsp; 
$sql = $conexion-&gt;Prepare("SELECT * FROM apoderado WHERE rut_alumno = 
?");<BR>&nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array('12345678-9'));<BR><BR>&nbsp;&nbsp;&nbsp; 
mientras_el_lobo_no_esta();<BR><BR>&nbsp;&nbsp;&nbsp; // TRES y más consultas en 
el mismo script.<BR>&nbsp;&nbsp;&nbsp; $sql = $conexion-&gt;Prepare("SELECT * 
FROM cuotas WHERE rut_alumno = ?");<BR>&nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array('12345678-9'));<BR><BR>&nbsp;&nbsp;&nbsp; 
lobo_esta(?);<BR><BR>&nbsp;&nbsp;&nbsp; // Y antes de cerrar el script, la 
conexión se cierra sola.<BR>&nbsp;&nbsp;&nbsp; 
$conexion-&gt;Close();<BR><BR>&nbsp;&nbsp;&nbsp; 
terminado();<BR><BR>&nbsp;&nbsp;&nbsp; exit();<BR>?&gt;<BR><BR>El ejemplito este 
aprovecha una sola conexión no persistente, pero usando solamente "UN" script, 
lo cual a pesar de que está bien, te ensucia un poco el código y te lo hace un 
poquito ilegible, por todas esas SQL por aquí y por allá. OK, ahora vamos a 
hacer un script para las funciones, un script para abrir y cerrar la conexión, y 
tu script de lógica de negocios:<BR><BR>&lt;!-- conexion.php 
--&gt;<BR>&lt;?php<BR>&nbsp;&nbsp;&nbsp; // nuestra función que nos abre muchas 
puertas<BR>&nbsp;&nbsp;&nbsp; function abrir_conexion()<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
require_once('adodb/adodb.inc.php');<BR><BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $host = "123.123.123.123";<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $user = "postgres";<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
$pass = "nula";<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $base = "carepescao"; 
<BR><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $conexion = 
ADONewConnection("postgres");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
$conexion-&gt;NConnect($host, $user, $pass, $base);<BR><BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if(!$conexion-&gt;IsConnected)<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
die("Arghhh mi jefe me va a matar! me pitié la conexión");<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>&nbsp;&nbsp;&nbsp; // la 
función que cierra con llave cuando nos vayamos ;)<BR>&nbsp;&nbsp;&nbsp; 
function cerrar_conexion();<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if($conexion-&gt;IsConnected)<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 
$conexion-&gt;Close();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; 
&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }<BR><BR>?&gt;<BR><BR>&lt;!-- leo 
nuevamente:<BR>originalmente tu preguntaste por un "pool" de conexiones lo cual 
es diferente ya que ahi se puede compartir conexiones <B 
class=moz-txt-star><SPAN class=moz-txt-tag>*</SPAN>entre<SPAN 
class=moz-txt-tag>*</SPAN></B> procesos, y eso en PHP se tiene que hacer con 
ayuda externa.<BR>--&gt;<BR><BR>Nótese que compartir conexiones entre procesos 
(pooling) tiene diferencias con aprovechar las conexiones no persistentes: lo 
que vamos a hacer en el siguiente archivo aprovecha una conexión no persistente 
que esté abierta, en vez de estar abriendo y cerrando. Esto para mí también es 
llamado pooling, pero básico, y aunque no sea un proceso automatizado, así es 
como trabaja... La idea es siempre tener una y sólo una conexión disponible 
cuando la usemos sin tener que abrirla más que lo necesario, y cerrarla cuando 
ya tengamos todas nuestras operaciones hechas y no vayamos a usarla de 
inmediato, bien por estar requiriendo datos, bien por ya haberlos obtenido y 
estamos mostrándolos en otra página. La cerramos para liberar recursos y así 
optimizamos cualquier cantidad de memoria. Esta clase de pooling no comparte 
conexiones entre procesos (para mí un proceso tiene un PID y tiene un destino 
distinto).<BR><BR>&lt;!-- sql.php --&gt;<BR>&lt;?php<BR>&nbsp;&nbsp;&nbsp; 
require_once 'conexion.php';<BR><BR>&nbsp;&nbsp;&nbsp; // una funcion que lo 
unico que hace es retornar el recordset.<BR>&nbsp;&nbsp;&nbsp; function 
buscar_alumno($rut)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if(!$conexion-&gt;IsConnected || 
!isset($conexion))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
abrir_conexion();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $sql = $conexion-&gt;Prepare("SELECT * FROM alumno WHERE 
rut_alumno = ?");<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array($rut));<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 
return $rs;<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>&nbsp;&nbsp;&nbsp; // una funcion que 
lo unico que hace es retornar el recordset.<BR>&nbsp;&nbsp;&nbsp; function 
buscar_apoderado($rut)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if(!$conexion-&gt;IsConnected || 
!isset($conexion))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
abrir_conexion();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $sql = $conexion-&gt;Prepare("SELECT * FROM apoderado WHERE 
rut_alumno = ?");<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $rs = 
$conexion-&gt;Execute($sql,array($rut));<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 
return $rs;<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>&nbsp;&nbsp;&nbsp; // una funcion que 
lo unico que hace es retornar el recordset.<BR>&nbsp;&nbsp;&nbsp; function 
buscar_cuotas($rut)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; si la conexión no existe, o no se ha seteado, entonces 
abrimos la conexion. Si la conexion existe, para que?<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if(!$conexion-&gt;IsConnected || 
!isset($conexion))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
abrir_conexion();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $sql = $conexion-&gt;Prepare("SELECT 
* FROM cuotas WHERE rut_alumno = ?");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
$rs = $conexion-&gt;Execute($sql,array($rut));<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; return $rs;<BR>&nbsp;&nbsp;&nbsp; }<BR>?&gt;<BR><BR>&lt;!-- 
bussiness.php --&gt;<BR>&lt;?php<BR>&nbsp;&nbsp;&nbsp; require_once 
'conexion.php';<BR>&nbsp;&nbsp;&nbsp; require_once 
'sql.php';<BR><BR>&nbsp;&nbsp;&nbsp; // abrimos la 
conexion();<BR>&nbsp;&nbsp;&nbsp; abrir_conexion();<BR><BR>&nbsp;&nbsp;&nbsp; // 
procesamos algunas cosas...<BR>&nbsp;&nbsp;&nbsp; 
dibujemos();<BR><BR>&nbsp;&nbsp;&nbsp; // llamamos a nuestra 
consulta.<BR>&nbsp;&nbsp;&nbsp; // esto ya es lógica de negocios, ¿no? &nbsp; 
<BR>&nbsp;&nbsp;&nbsp; $resultado1 = 
buscar_alumno($rut);<BR><BR>&nbsp;&nbsp;&nbsp; // tururururu, me gusta 
cantar...<BR>&nbsp;&nbsp;&nbsp; 
juguemos_en_el_bosque();<BR><BR>&nbsp;&nbsp;&nbsp; // nuestra logica de negocios 
requiere que<BR>&nbsp;&nbsp;&nbsp; // busquemos al responsable por el cabro de 
.. ;)<BR>&nbsp;&nbsp;&nbsp; $resultado2 = 
buscar_apoderado($rut);<BR><BR>&nbsp;&nbsp;&nbsp; // el lobo andaba comiéndose 
unas abuelitas por ahi<BR>&nbsp;&nbsp;&nbsp; 
mientras_el_lobo_no_esta();<BR><BR>&nbsp;&nbsp;&nbsp; // de nuevo, no 
necesitamos de SQL feos por ahi...<BR>&nbsp;&nbsp;&nbsp; $resultado3 = 
buscar_cuotas($rut);<BR><BR>&nbsp;&nbsp;&nbsp; // mostramos los resultados en la 
pantalla...<BR>&nbsp;&nbsp;&nbsp; lobo_esta(?);<BR><BR>&nbsp;&nbsp;&nbsp; // 
cerramos la conexion...<BR>&nbsp;&nbsp;&nbsp; 
cerrar_conexion();<BR><BR>&nbsp;&nbsp;&nbsp; // cerramos algunas otras cosillas, 
o bien cargamos el footer, que se yo,<BR>&nbsp;&nbsp;&nbsp; 
terminado();<BR><BR>&nbsp;&nbsp;&nbsp; // una vieja costumbre mía, heredada de 
los antiguos BASIC de ATARI.<BR>&nbsp;&nbsp;&nbsp; // nadie me ha convencido de 
que esto no es necesario<BR>&nbsp;&nbsp;&nbsp; exit();<BR>?&gt;<BR><BR>Como 
puedes ver, finalmente son más archivos, pero el que te interesa que es la 
lógica de negocios, te queda lindo para leer. La cosa es diseñar un poco más 
ordenado. El que programes en 3, 4, 5 o 100 capas si quieres no significa que 
las capas no se interconecten, pues la lógica de presentación necesita que la 
lógica de negocios le pase datos, y la lógica de negocios necesita conectarse a 
la base de datos, para que tenga algo que procesar!!!<BR>
<BLOCKQUOTE cite=mida9b983730602100539y487e39bau@mail.gmail.com 
  type="cite">Mil disculpas si soy muy pregunton, pero siempre me gusta sacar 
  conclusiones valiosas de las conversaciones.... Gracias de 
antemano...<BR></BLOCKQUOTE>Cero dramas. Si Google no es claro en el asunto (de 
hecho no lo fue cuando lo investigué) no hay problemas en discutirlo y aclarar 
las dudas.<BR>
<BLOCKQUOTE cite=mida9b983730602100539y487e39bau@mail.gmail.com 
  type="cite">Nos leemos<BR>-----------------<BR>Juan 
Pablo</BLOCKQUOTE></BODY></HTML>