Programación Web y Scripting > PHP

 construir funciones propias

<< < (2/3) > >>

DriverOp:
El problema con esa función es que no devuelve el puntero a la conexión y al usarla estás confiando en la última conexión abierta. Aunque funciona esto no es deseable.

cesand:
mmmmm driverOp como me hubiece gustado interpretar bien lo que quiciste decir con que dijiste que mi funcion no devuelve el puntero a la conexión me podras decir con otras palabras como es eso? que significa que no devuelve el puntero a la conexion?

saludos

DriverOp:
La función mysql_connect() cuando es exitosa devuelve un puntero, ese puntero se usa en las siguientes operaciones a la base de datos para indicar que debe usar esa conexión abierta y no otra.

[php:3tc12f4l] $link = mysql_connect("localhost","usuario", "contraseña"); [/php:3tc12f4l]

$link es el puntero de la conexión.

En tu código la función conn(), el primer parámetro es ese puntero.

Entonces para cada operación con MySQL debes indicarle qué conexión usar:

[php:3tc12f4l] $result = mysql_query($sql, $link); [/php:3tc12f4l]

Tu función debería devolver ese puntero:

[php:3tc12f4l] function conn($var2, $var3, $var4) {   $var1 = mysql_connect("$var2", "$var3", "$var4");   if (!$var1) {         echo "no se pudo conectar con la base de datos";   } else {         echo "se conectar con la base de datos";   }  return $var1;} [/php:3tc12f4l]

Y así poder usarlo en las otras operaciones:

[php:3tc12f4l] require("fn_conexion.php");$link = conn("localhost", "root", ""); mysql_select_db("discos", $link); $sql = "select * from discos";$query = mysql_query($sql, $link);$rows = mysql_num_rows($query); for ($i=0; $i<$rows; $i++) {$ver = mysql_fetch_array($query);echo $ver['titulo_disco']."<br>";} [/php:3tc12f4l]

Lo que ocurre es que las funciones donde se usa ese puntero, el puntero es opcional porque PHP mantiene internamente una conexión activa que puede usarla cualquier función que la requiera, esa conexión activa es la última que se pide. En tu caso, como has abierto una sola no hay problema porque se usa siempre esa, pero te tocará el caso donde tengas que abrir más de una y trabajar con ellas al mismo tiempo y no sabrás por qué saltan errores "misteriosos".

En definitiva: es buena práctica de programación indicar siempre cuál conexión a la base de datos estás usando.

cesand:
Muy buena driverOp
demore un poco en contestar porque estaba probando lo que me comentas y queria probar antes de responderte por las dudas que quede alguna duda y te la planteaba pero me dejaste bastante claro el asunto por ahora.. y como decis quizas ahora no me estoy dando cuenta por que es verdad hast ahora en todos los script que hice e usado una sola conexion la cual dejo abierta y uso para las consultas..
voy a implementar como dijiste esta "buena practica de programacion"
mil gracias
suerte.

cesand:
DriverOp una pregunta...

por ahi parece que comprendo bien el return y ahora me caen otra vez dudas.. el uso de return es para cortar la continuidad de la funcion.. es decir si ponemos una condicion en la funcion y esta se cumple y aparece un return listo esa funcion se va ejecutar hasta ahi, pero el caso de esta funcion para conectar con mysql que vos me arreglaste
 cuando usas return $var1; que estas haciendo en otras palabras que no sea devolver el puntero.. que es lo que se esta haciendo? se esta obligando a que $var1 quede sin ningun valor? es decir que quede vacia asi cuando despues si nos hace falta abrir otra conexion podemos tabrajar con una conexion nueva?

 function conn($var2, $var3, $var4) {
    $var1 = mysql_connect("$var2", "$var3", "$var4");
    if (!$var1) {
          echo "no se pudo conectar con la base de datos";
   } else {
          echo "se conectar con la base de datos";
    }
   return $var1;
 }
 

es eso o estoy mal en lo que interpreto?

saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa