Mensajes: 3,284
Temas: 41
Registro en: Jan 2014
Reputación:
28
07/10/2016, 08:53 PM
Hola a todos,
bueno tengo unas dudas respecto a si lo que hice es la "manera correcta" de hacerlo, no?
Esto sería un ejemplo de como lo tengo. Sí, funciona, al menos lo que necesito lo hace.
Código PHP: <?php $iMySQLi = new mysqli('127.0.0.1', 'root', 'pass', 'table');
if($iMySQLi->connect_errno) { echo "Falló la conexión a MYSQL: (" . $iMySQLi->connect_errno . ")" . $iMySQLi->connect_error; } if($sqlQuery = $iMySQLi->prepare("SELECT dato1, dato2, dato3, FROM table ORDER BY dato2 DESC LIMIT 5;")) { if($sqlQuery->execute()) { if($sqlQuery->bind_result($Dato1, $Dato2, $Dato3)) { while($sqlQuery->fetch()) { // code // code } } $sqlQuery->close(); } } $iMySQLi->close(); ?>
Mi duda sería saber si la forma en que chequeo si se ejecuta la query, y todo eso lo hago bien o hay un método más seguro o "correcto" en hacerlo, no se si me llego a explicar.
Gracias por leer.
Mensajes: 1,455
Temas: 36
Registro en: Oct 2013
Reputación:
6
07/10/2016, 09:20 PM
(Última modificación: 07/10/2016, 09:23 PM por Destro.)
las consultas preparadas se crearon para mejorar el rendimiento cuando se manejan cosas grosas donde se repiten las mismas consultas cambiando algunas variables, es alp2 para cosas pequeñas, aunque muchos lo usan porque no tienen confianza en recordar escapar las variables importantes y tienen miedo a los kacker... (mi teoría xd)
cuando comprobas la conexion mete un exit/return
no es necesario usar close() para cerrar la conexion
Mensajes: 3,284
Temas: 41
Registro en: Jan 2014
Reputación:
28
Que tiene que no sea necesario cerrar las consultas y la conexión?
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
07/10/2016, 11:23 PM
(Última modificación: 07/10/2016, 11:25 PM por Neeeeeeeeeel.-.)
(07/10/2016, 09:20 PM)Destro escribió: las consultas preparadas se crearon para mejorar el rendimiento cuando se manejan cosas grosas donde se repiten las mismas consultas cambiando algunas variables, es alp2 para cosas pequeñas, aunque muchos lo usan porque no tienen confianza en recordar escapar las variables importantes y tienen miedo a los kacker... (mi teoría xd)
cuando comprobas la conexion mete un exit/return
no es necesario usar close() para cerrar la conexion No es al p2 para cosas pequeñas, justamente porque previene la SQLi... nunca te tenés que preocupar por escapar los strings.
Como es eso de que no es necesario hacer un close???
Mensajes: 1,455
Temas: 36
Registro en: Oct 2013
Reputación:
6
por eso dije que muchos lo usan para no preocuparse por escapar los strings...
la conexion se cierra al finalizar el script, en muy raros casos es necesario finalizarlo antes
Mensajes: 3,284
Temas: 41
Registro en: Jan 2014
Reputación:
28
Bueno si, la conexión como siempre lo cierro al final. Pero las consultas, eso no es necesario cerrarlas? Pero si se puede hacer, por que no lo haría? xD
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
08/10/2016, 12:05 PM
(Última modificación: 08/10/2016, 12:05 PM por Neeeeeeeeeel.-.)
(08/10/2016, 12:31 AM)Destro escribió: por eso dije que muchos lo usan para no preocuparse por escapar los strings...
la conexion se cierra al finalizar el script, en muy raros casos es necesario finalizarlo antes Estás segurooo???? Hasta donde tenía entendido deja la conexión abierta en el mysql como cuando usas mysql_*... Voy a investigar.
PD: Igual es una mala práctica no cerrarlas... después hacés algo en C/C++ y el consumo de memoria de tu producto final va a ser ++++++++++ por acostumbrarte a no cerrar handlers o liberar memoria.
Mensajes: 538
Temas: 13
Registro en: Oct 2013
Reputación:
16
Como ya dijeron, no es necesario cerrar la conexion, pero como buena practica deberias hacerlo. Ademas, si ya no lo necesitas, cierralo - no tienes por que esperar a termine el script.
Tampoco es necesario que tengas tantas condiciones para cada cosa:
Código PHP: if($sqlQuery = $iMySQLi->prepare("SELECT dato1, dato2, dato3, FROM table ORDER BY dato2 DESC LIMIT 5;")) { if($sqlQuery->execute()) { if($sqlQuery->bind_result($Dato1, $Dato2, $Dato3)) {
Con el primer if seria suficiente.
Otra cosa:
Código PHP: echo "Falló la conexión a MYSQL: (" . $iMySQLi->connect_errno . ")" . $iMySQLi->connect_error;
El usuario nunca deberia de ver los errores, solo el desarrollador a traves de archivos logs.
Hi [R]ak
Mensajes: 3,284
Temas: 41
Registro en: Jan 2014
Reputación:
28
08/10/2016, 03:49 PM
(Última modificación: 08/10/2016, 05:19 PM por Federicomb.)
(08/10/2016, 02:15 PM)Milashkasiya escribió: Como ya dijeron, no es necesario cerrar la conexion, pero como buena practica deberias hacerlo. Ademas, si ya no lo necesitas, cierralo - no tienes por que esperar a termine el script.
Tampoco es necesario que tengas tantas condiciones para cada cosa:
Código PHP: if($sqlQuery = $iMySQLi->prepare("SELECT dato1, dato2, dato3, FROM table ORDER BY dato2 DESC LIMIT 5;")) { if($sqlQuery->execute()) { if($sqlQuery->bind_result($Dato1, $Dato2, $Dato3)) {
Con el primer if seria suficiente.
Otra cosa:
Código PHP: echo "Falló la conexión a MYSQL: (" . $iMySQLi->connect_errno . ")" . $iMySQLi->connect_error;
El usuario nunca deberia de ver los errores, solo el desarrollador a traves de archivos logs.
Ohh perfecto, y como debería mejorar esto? :
Código PHP: if($sqlQuery = $iMySQLi->prepare("SELECT dato1, dato2, dato3, FROM table ORDER BY dato2 DESC LIMIT 5;")) { if($sqlQuery->execute()) { if($sqlQuery->bind_result($Dato1, $Dato2, $Dato3)) {
Gracias por la ayuda.
EDIT:
Se va a ejecutar siempre y cuando "prepare" sea true? Osea, no sería necesario chequear si se ejecuta, por que lo haría?
Código PHP: if($sqlQuery = $iMySQLi->prepare("SELECT dato1, dato2, dato3, FROM table ORDER BY dato2 DESC LIMIT 5;")) { $sqlQuery->execute();
$sqlQuery->bind_result($Dato1, $Dato2, $Dato3);
|