Hola a todos listeros...<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 src="http://www.forosdelweb.com/images/smilies/dedosarriba.gif" alt="" title="de acuerdo" class="inlineimg" 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>
<div style="margin: 5px 20px 20px;">
        <div class="smallfont" style="margin-bottom: 2px;">Código PHP:</div>
        <div class="alt2" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 306px;">
                <code style="white-space: nowrap;">
                </code><div dir="ltr" style="text-align: left;">
                        <code><font color="#000000">
<font color="#007700"><?</font><font color="#0000bb">php BEGIN__VBULLETIN__CODE__SNIPPET </font><font color="#007700">function </font><font color="#0000bb">buscarAlumno</font><font color="#007700">(</font><font color="#0000bb">
$codigo</font><font color="#007700">){<br> </font><font color="#0000bb">$con </font><font color="#007700">= new </font><font color="#0000bb">Conexion</font><font color="#007700">();<br> </font><font color="#0000bb">
$con</font><font color="#007700">-></font><font color="#0000bb">conectarse</font><font color="#007700">();<br><br> </font><font color="#ff8000">// hago mi consulta<br> </font><font color="#0000bb">$con</font><font color="#007700">
-></font><font color="#0000bb">query</font><font color="#007700">(</font><font color="#0000bb">$sql</font><font color="#007700">)<br><br> </font><font color="#0000bb">$alumno </font><font color="#007700">= new </font>
<font color="#0000bb">Alumno</font><font color="#007700">(); <br> </font><font color="#0000bb">$alumno</font><font color="#007700">-></font><font color="#0000bb">colegio </font><font color="#007700">= </font><font color="#0000bb">
Colegio</font><font color="#007700">::</font><font color="#0000bb">buscarColegio</font><font color="#007700">(</font><font color="#0000bb">$data</font><font color="#007700">[</font><font color="#dd0000">"cod_colegio"
</font><font color="#007700">]);<br> </font><font color="#ff8000">//este metodo internamente tambien abre y cierra una conexion;<br> </font><font color="#0000bb">$alumno</font><font color="#007700">-></font><font color="#0000bb">
ciudad </font><font color="#007700">= </font><font color="#0000bb">Colegio</font><font color="#007700">::</font><font color="#0000bb">buscarCiudad</font><font color="#007700">(</font><font color="#0000bb">$data</font><font color="#007700">
[</font><font color="#dd0000">"cod_ciudad"</font><font color="#007700">]);<br> </font><font color="#ff8000">//esta tambien<br> //... y cuantas tuviera<br><br> </font><font color="#0000bb">$con</font><font color="#007700">
-></font><font color="#0000bb">cerrar_conexion</font><font color="#007700">();<br> </font><font color="#ff8000">// cerramos la conexion de al inicio<br> </font><font color="#007700">return </font><font color="#0000bb">
$alumno</font><font color="#007700">;<br>}
<br></font>
</font>
</code>
                </div>
                
        </div>
</div>
Esto abriria y cerraria muchas conexiones por lo q reventaria el limite de estas.<br>
Otro caso es este:<br>
<div style="margin: 5px 20px 20px;">
        <div class="smallfont" style="margin-bottom: 2px;">Código PHP:</div>
        <div class="alt2" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 210px;">
                <code style="white-space: nowrap;">
                </code><div dir="ltr" style="text-align: left;">
                        <code><font color="#000000">
<font color="#007700"><?</font><font color="#0000bb">php BEGIN__VBULLETIN__CODE__SNIPPET </font><font color="#007700">function </font><font color="#0000bb">buscarAlumno</font><font color="#007700">(</font><font color="#0000bb">
$con</font><font color="#007700">,</font><font color="#0000bb">$codigo</font><font color="#007700">){<br> </font><font color="#0000bb">$alumno </font><font color="#007700">= new </font><font color="#0000bb">Alumno</font>
<font color="#007700">();<br> </font><font color="#ff8000">// hago mi consulta<br> </font><font color="#0000bb">$con</font><font color="#007700">-></font><font color="#0000bb">query</font><font color="#007700">(</font>
<font color="#0000bb">$sql</font><font color="#007700">)<br> </font><font color="#0000bb">$alumno</font><font color="#007700">-></font><font color="#0000bb">colegio </font><font color="#007700">= </font><font color="#0000bb">
Colegio</font><font color="#007700">::</font><font color="#0000bb">buscarColegio</font><font color="#007700">(</font><font color="#0000bb">$con</font><font color="#007700">,</font><font color="#0000bb">$data</font><font color="#007700">
[</font><font color="#dd0000">"cod_colegio"</font><font color="#007700">]);<br> </font><font color="#ff8000">//usa la conexion ya disponible;<br> </font><font color="#0000bb">$alumno</font><font color="#007700">
-></font><font color="#0000bb">ciudad </font><font color="#007700">= </font><font color="#0000bb">Colegio</font><font color="#007700">::</font><font color="#0000bb">buscarCiudad</font><font color="#007700">(</font><font color="#0000bb">
$con</font><font color="#007700">,</font><font color="#0000bb">$data</font><font color="#007700">[</font><font color="#dd0000">"cod_ciudad"</font><font color="#007700">]);<br> </font><font color="#ff8000">//este tambien
<br> //... y cuantas tuviera<br><br> </font><font color="#007700">return </font><font color="#0000bb">$alumno</font><font color="#007700">;<br>}
<br></font>
</font>
</code>
                </div>
                
        </div>
</div>
<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?<br>
¿Existe una tercera forma?<br>
¿Que hay de los pool de conexiones.. me comentaban que evitaban estos problemas?<br>
Esto ultimo no lo he investigado<br>
Agredecere cualquier colaboracion.<br clear="all"><br>-- <br>Juan Pablo