Foros del Web » Programando para Internet » PHP »

Ayuda con función

Estas en el tema de Ayuda con función en el foro de PHP en Foros del Web. Estoy intentando hacere una función que haga mysql_queries a partir de dos parámetros. El código que tengo es este: Código PHP: <? # Consultador a BD function  consultar ...
  #1 (permalink)  
Antiguo 18/12/2002, 03:40
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Ayuda con función

Estoy intentando hacere una función que haga mysql_queries a partir de dos parámetros.

El código que tengo es este:
Código PHP:
<?
# Consultador a BD
function consultar($nom$consulta){
    
$nom mysql_query($consulta) or die("<b>Consulta:</b> $consulta<p><br><b>Error:</b>".mysql_error());
    return 
$nom;
}
?>
Creo que la idea de lo que quiero hacer es bastante clara, quiero usar la función así:

consultar($q_results, "SELECT * FROM tabla");

Y que sea lo mismo que usar:

$q_results = mysql_query("SELECT * FROM tabla") or die("<b>Consulta:</b> SELECT * FROM tabla<p><br><b>Error:</b>".mysql_error());

La función en sí parece funcionar, pero al intentar hacer un mysql_fetch_row($q_results); me devuelve:

Cita:
Warning: Supplied argument is not a valid MySQL result resource in /home/projectes/web/app_funcions.php on line 10
__________________
M a l d i t o F r i k i

Última edición por Cain; 18/12/2002 a las 03:43
  #2 (permalink)  
Antiguo 18/12/2002, 06:34
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 22 años, 2 meses
Puntos: 1
Hola, yo me hice unas funciones utiles dado q nunca me acuerdo las sintaxis dado q recien empiezo con PHP.

Aqui van algunas basicas para manejo de BD :


function conexion() {
$sserver = "miserver";
$suser = "usuario";
$spassword = "password";
return mysql_connect($sserver,$suser,$spassword);
}

function sql($sql) {
$conn = conexion();
$sdb = "comercios";
mysql_select_db($sdb,$conn);
$squery = $sql;
$result = mysql_query($squery,$conn);
return $result;
}

function proximo($result) {
return mysql_fetch_array($result);
}


y las utilizas asi :


$result = sql("SELECT * FROM Articulos WHERE Codigo='" . $codigo . "'");
$row = proximo($result);
. . .
cerrar($result);

espero te sirvan. Saludos !

PD: El error ese q te da es tipico porque no encuentra la Tabla o algun campo, ojo! respetar las minusculas/mayusculas tal cual estan en la BD, ya q creo es sensible, te puede dar error si llamas a tabla y en realidad debiera ser Tabla.
  #3 (permalink)  
Antiguo 18/12/2002, 09:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En concreto .. el error es porque no le estas pasando a tu funcion que hace el "query" el link de conexión de la base de datos q estas usando .. Tendrias q añadir un tercer parámetro para pasarselo:

Código PHP:
function consultar($nom$consulta,$link_db){
    
$nom mysql_query($consulta,$link_db) or die("<b>Consulta:</b> $consulta<p><br><b>Error:</b>".mysql_error());
    return 
$nom;
}

$link_db=$mysql_connect(.......);
consultar($nom$consulta,$link_db); 
Si te das cuentas .. en las funciones de Nochero veras que usa y devuelve el link de conexión para el resto de llamadas de mysql_xxx

Y ya puestos .. jeje mete todas las funciones en una class y tienes un objeto xD


Un saludo,
  #4 (permalink)  
Antiguo 18/12/2002, 09:12
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Ahora lo pruebo, gracias

Por cierto, sabéis algún sitio donde se explique mejor que en http://www.php.net como funcionan las funciones ?
__________________
M a l d i t o F r i k i
  #5 (permalink)  
Antiguo 18/12/2002, 13:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Mucho me temo que el problema es como usas la funcion y las variables, en concreto la que almacena el resultado. Cuando pasas una variable como parametro a una funcion solo pasas su valor. Cuando en la funcion modificas el parametro, lo que realmente se modifica es una variable local que se inicializa con el valor de la variable que le has pasado. Lo que no se modifica es la variable que le has pasado. Si tu funcion solo devuelve el valor, seria mejor diseñarlo como
Código PHP:
function consultar($consulta){

    
$nom mysql_query($consulta) or die("<b>Consulta:</b> $consulta<p><br><b>Error:</b>".mysql_error());

    return 
$nom;


Mas que nada, es que no utilizas para nada el valor que le pasas a $nom.

Si lo que deseas es lo que en algunos lenguajes se llama un parametro de entrada/salida, deberias mirar las referencias(parecido a C).

En otros lenguajes tambien existian parametros de solo salida que se usaban dobre todo si se tenian que devolver varios valores. Pero en PHP puedes sin mas devolver un array con los valores y recibirlos con ayuda de list() en distintas variables.

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 18/12/2002, 15:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm bueno, mirandolo bien (por si todavía no lo solucionastes):


Código PHP:
function consultar($consulta,$link_db){
    
$nom mysql_query($consulta,$link_db) or die("<b>Consulta:</b> $consulta<p><br><b>Error:</b>".mysql_error());
    return 
$nom;
}

$link_db=$mysql_connect(.......);
$consulta=consultar($consulta,$link_db);

While(
$row=mysql_fetch_array($consulta)){
// etc ....

Es decir .. por el ambito de las varialbles de funcion te faltaba indicar el link de conexion a la base de datos ..

Y .. el parámetro que devuelves (la consulta en si) .. la devuelve la propia funcion via tu return $nom .. pero lo hace "sobre si misma" .. dejando su valor donde lo llamaron .. He de ahi el ejemplo que se asigna a $consulta=el resultado de la llamada a la funcon consultar() ...

Un saludo,
  #7 (permalink)  
Antiguo 19/12/2002, 11:37
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Tambien se puede hacer el paso de parametros por referencia, entonces queda como inicialmente queria Cain. Fijate que se le agrega un & en la funcion.
Código PHP:
function consultar(&$nom$query$link_db){
    
$nom mysql_query($query$link_db) or die("<b>Consulta:</b> $query<p><br><b>Error:</b>".mysql_error());
}

$link_db=mysql_connect(......);
mysql_select_db ("....."$link_db);
consultar($result$consulta$link_db);

While(
$row=mysql_fetch_array($result)){
   
//etc...

  #8 (permalink)  
Antiguo 19/12/2002, 11:39
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Muchas gracias fran86

Eso del & no lo sabía yo

¿Conoces alguna web que explique como trabajar con funciones y que de información útil como eso del & que no había visto nunca antes?
__________________
M a l d i t o F r i k i
  #9 (permalink)  
Antiguo 19/12/2002, 11:54
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Esto esta en el mismo manual de php...
http://www.php.net/manual/es/functions.arguments.php

Saludos.
  #10 (permalink)  
Antiguo 19/12/2002, 11:59
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Esa parte del manual me la había perdido

Ahora me pondré a estudiarla, muchas gracias
__________________
M a l d i t o F r i k i
  #11 (permalink)  
Antiguo 19/12/2002, 14:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Estoy un pelin quisquilloso. Me gustaria discutir la decision que has hecho de poner el die() dentro de la funcion. Tal como la has puesto, siempre que falle la consulta, el script va ha finalizar mostrando ese mensaje. Yo creo que esa no deberia ser la funcion de esta funcion. Yo creo que en caso de error en la consulta, en $nom deberias poner un valor no valido (el mismo valor que devuelve mysql_query, o NULL) y devolver un valor FALSE. En caso de que todo sea correcto, $nom tendra un valor valido y la funcion devolvera TRUE. Asi, en caso de error, sera el codigo que llama a la funcion la que decida que hacer.

Es mi humilde opinion. Espero leer la vuestra.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.