On 2/8/06, <b class="gmail_sendername">JuanPa</b> &lt;<a href="mailto:juanpablo.magno@gmail.com">juanpablo.magno@gmail.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
[Reenviado, el codigo estaba un poco pequeño]<br>Hola a todos foristas...<span class="q"><br>
Estoy implementando un sistema de registro de alumnos en PHP5 /
Postgres con tres capas, no estoy utilizando ningun framework o uno de
esos otros chiches <img alt="" title="de acuerdo" border="0">
(quisiera toparme con estos problemillas primero). Mi consulta radica
en la forma en que hago mis conexiones de base datos, si bien es cierto
hay q dejar todo el peso de las conexiones a la capa de persistencia de
datos, esto hace q abra y cierre las conexiones a cada rato.<br>
Por ejemplo en el caso de cargar un objeto alumno haria:<br>
</span><div style="margin: 5px 20px 20px;">
        <div style="margin-bottom: 2px;">Código PHP:</div>
        <div style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px;">
                <code style="white-space: nowrap;">
                </code><span class="q"><div style="text-align: left;" dir="ltr">
                        <code><font color="#000000">&nbsp;<font color="#007700" size="4"></font><font color="#007700" size="4">function&nbsp;</font><font color="#0000bb" size="4">buscarAlumno</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">

$codigo</font><font color="#007700" size="4">){<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$con&nbsp;</font><font color="#007700" size="4">=&nbsp;new&nbsp;</font><font color="#0000bb" size="4">Conexion</font><font color="#007700" size="4">

();<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$con</font><font color="#007700" size="4">-&gt;</font><font color="#0000bb" size="4">conectarse</font><font color="#007700" size="4">();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">

//&nbsp;hago&nbsp;mi&nbsp;consulta<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$con</font><font color="#007700" size="4">-&gt;</font><font color="#0000bb" size="4">query</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">

$sql</font><font color="#007700" size="4">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$alumno&nbsp;</font><font color="#007700" size="4">=&nbsp;new&nbsp;</font><font color="#0000bb" size="4">Alumno</font><font color="#007700" size="4">

();&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$alumno</font><font color="#007700" size="4">-&gt;</font><font color="#0000bb" size="4">colegio&nbsp;</font><font color="#007700" size="4">=&nbsp;</font><font color="#0000bb" size="4">

Colegio</font><font color="#007700" size="4">::</font><font color="#0000bb" size="4">buscarColegio</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">$data</font><font color="#007700" size="4">[</font>

<font color="#dd0000" size="4">&quot;cod_colegio&quot;</font><font color="#007700" size="4">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">//este&nbsp;metodo&nbsp;internamente&nbsp;tambien&nbsp;abre&nbsp;y&nbsp;cierra&nbsp;una&nbsp;conexion;<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">

$alumno</font><font color="#007700" size="4">-&gt;</font><font color="#0000bb" size="4">ciudad&nbsp;</font><font color="#007700" size="4">=&nbsp;</font><font color="#0000bb" size="4">Colegio</font><font color="#007700" size="4">::
</font>
<font color="#0000bb" size="4">buscarCiudad</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">$data</font><font color="#007700" size="4">[</font><font color="#dd0000" size="4">&quot;cod_ciudad&quot;
</font><font color="#007700" size="4">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">//esta&nbsp;tambien<br>&nbsp;&nbsp;&nbsp;&nbsp;//...&nbsp;y&nbsp;cuantas&nbsp;tuviera<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$con</font><font color="#007700" size="4">

-&gt;</font><font color="#0000bb" size="4">cerrar_conexion</font><font color="#007700" size="4">();<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">//&nbsp;cerramos&nbsp;la&nbsp;conexion&nbsp;de&nbsp;al&nbsp;inicio<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700" size="4">

return&nbsp;</font><font color="#0000bb" size="4">$alumno</font><font color="#007700"><font size="4">;<br>}&nbsp;
</font></font></font></code></div></span></div></div></blockquote><div>KATE O KWRITE :P<br>
<br>
&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><span class="q">
Esto abriria y cerraria muchas conexiones por lo q reventaria el limite de estas.</span></blockquote><div><br>
depende si estas tu motor de base de datos soporta conexiones persistentes y no cierras las conexiones no deberia reventar<br>
&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><span class="q">
Otro caso es este:<br>
</span><div style="margin: 5px 20px 20px;">
        <div style="margin-bottom: 2px;">Código PHP:</div>
        <div style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px;">
                <code style="white-space: nowrap;">
                </code><div style="text-align: left;" dir="ltr">
                        <code><font color="#000000">
<span class="q"><font color="#007700"></font><font color="#007700"><br><font size="4">function&nbsp;</font></font><font color="#0000bb" size="4">buscarAlumno</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">
$con</font>
<font color="#007700" size="4">,</font><font color="#0000bb" size="4">$codigo</font><font color="#007700" size="4">){<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$alumno&nbsp;</font><font color="#007700" size="4">=&nbsp;new&nbsp;</font>

<font color="#0000bb" size="4">Alumno</font><font color="#007700" size="4">();<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">//&nbsp;hago&nbsp;mi&nbsp;consulta<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$con</font><font color="#007700" size="4">

-&gt;</font><font color="#0000bb" size="4">query</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">$sql</font><font color="#007700" size="4">)<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">$alumno
</font><font color="#007700" size="4">-&gt;</font><font color="#0000bb" size="4">colegio&nbsp;</font><font color="#007700" size="4">=&nbsp;</font><font color="#0000bb" size="4">Colegio</font><font color="#007700" size="4">::</font>

<font color="#0000bb" size="4">buscarColegio</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">$con</font><font color="#007700" size="4">,</font><font color="#0000bb" size="4">$data</font><font color="#007700" size="4">

[</font><font color="#dd0000" size="4">&quot;cod_colegio&quot;</font><font color="#007700" size="4">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">//usa&nbsp;la&nbsp;conexion&nbsp;ya&nbsp;disponible;<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb" size="4">

$alumno</font><font color="#007700" size="4">-&gt;</font><font color="#0000bb" size="4">ciudad&nbsp;</font><font color="#007700" size="4">=&nbsp;</font><font color="#0000bb" size="4">Colegio</font><font color="#007700" size="4">::
</font>
<font color="#0000bb" size="4">buscarCiudad</font><font color="#007700" size="4">(</font><font color="#0000bb" size="4">$con</font><font color="#007700" size="4">,</font><font color="#0000bb" size="4">$data</font><font color="#007700" size="4">

[</font><font color="#dd0000" size="4">&quot;cod_ciudad&quot;</font><font color="#007700" size="4">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000" size="4">//este&nbsp;tambien<br>&nbsp;&nbsp;&nbsp;&nbsp;//...&nbsp;y&nbsp;cuantas&nbsp;tuviera<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700" size="4">

return&nbsp;</font><font color="#0000bb" size="4">$alumno</font><font color="#007700"><font size="4">;<br>}&nbsp;
</font><br></font>
</span></font>
</code>
                </div>
                
        </div>
</div><div><span class="e" id="q_1094bc3164cb2e76_9">
<br>
Aqui mando mi conexion abierta desde fuera, pero esto haria que el que
abra mi conexion sea mi capa de logica de negocio, pero supuestamente
esta no debería ser su funcion, ademas imaginemos q el metodo de la
capa de logica sea un poco extensa, la conexion estaria abierta mucho
tiempo, y eso tambien acarrearia problemas.<br>
La pregunta del millon es esta... <br>
¿Cual de las dos formas es la mas optima a utilizar?</span></div></blockquote><div><br>
mmm no me convence ninguna<br>
<br>
&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><span class="e" id="q_1094bc3164cb2e76_9">
¿Existe una tercera forma?</span></div></blockquote><div><br>
si y una cuarta y una quinta....etc<br>
<br>
&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><span class="e" id="q_1094bc3164cb2e76_9">
¿Que hay de los pool de conexiones.. me comentaban que evitaban estos problemas?</span></div></blockquote><div><br>
No me suena, pero.... <br>
</div><br><div><br>
Utiliza clases de acceso a datos (onda class ColegioDAO) y que estos
DAOs sea los encargados de abrir(no de cerrar) conexiones con la base
de datos. La idea es que estos DAOs se comuniquen con algun
DAOConnector.php y en este archivo se abran las conexiones a la base de
datos(o las bases de datos), asi como tambien almacenar cualquier
configuracion adicional de conexion este en DAOConnector. De esta
manera la capa de negocios solamente se entendera con los DAOs y ellos
verán como obtienen los datos y los empaquetaran en los Beans(crea unos
Beans(onda class ColegioBean) que tenga sus getters y setters(no se si
esta bien escrito) y que estos sean los encargados de llevar la
informacion empaquetada)<br>
<br>
Ahora bien... PHP automaticamente liberará todos los resources que no
se esten ocupando al finalizar el script por lo que no es necesario
cerrar las conexiones a las bases de datos(con conexiones persistentes)
PHP se encargará cuando sea necesario(algo asi como un recolector de
basura de JAVA)<br>
<br>
&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><span class="e" id="q_1094bc3164cb2e76_9">
Esto ultimo no lo he investigado<br>
Agredecere cualquier colaboracion.<br>-- <br>Juan Pablo

</span></div></blockquote></div><br>saludos!<br clear="all"><br>-- <br>Julio
Araya
C.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Linux User #386141<br>Estudiante de Ingeniería Civil Informatica&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Valparaiso - Chile<br>Universidad Tecnica Federico Santa Maria<br><a href="http://www.alumnos.utfsm.cl/~julio.araya">http://www.alumnos.utfsm.cl/~julio.araya
</a><br><a href="http://www.arriendocasas.cl">http://www.arriendocasas.cl</a><br><br>