Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error si llamo dentro de una función

Estas en el tema de Error si llamo dentro de una función en el foro de PHP en Foros del Web. Hola, este error he visto que es común, que hay bastantes hilos, pero ninguno me soluciona el problema. El caso es que da el típico ...
  #1 (permalink)  
Antiguo 16/05/2013, 05:54
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años
Puntos: 2
Exclamación Error si llamo dentro de una función

Hola, este error he visto que es común, que hay bastantes hilos, pero ninguno me soluciona el problema. El caso es que da el típico error de
Cita:
expects parameter 1 to be mysqli_result, boolean given
El código que muestro está muy simplificado con respecto al original, pero como el error persiste es más sencillo aportarlo así.

Este código funciona perfectamente si no lo llamo desde la función y lo ejecuto directamente, pero al llamar a la función salta el error. Así que no es un problema de que no me devuelva resultados, haberlos haylos, pero no sé porque dentro de la función $result siempre es false, ya hice todas las pruebas con un if englobando el $result=mysqli_query... pero no soluciona nada evidentemente.

Aquí la muestro con
Código:
$array=mysqli_fetch_all($result,MYSQLI_ASSOC);
pero he probado con _assoc _array y da el mismo error ya que $result sigue siendo false.


Esta es la función simplificada:

Código PHP:
<?php require_once("private/connection.php"?>
<?php

function dataSelect(){

    @
$connectionmysqli_connect($host,$user,$pass,$base);
        if (
mysqli_connect_errno()) {
                
printf("Conexión fallida: %s\n"mysqli_connect_error());
            exit();
        }

    
$query="SELECT * FROM medios";
    
$result=mysqli_query($connection,$query);
    
$array=mysqli_fetch_all($result,MYSQLI_ASSOC);

    
mysqli_free_result($result);
        
mysqli_close($connection);

    return 
$array;
}

 
?>
Aquí la llamo:

Código PHP:
<?php include "functions.php" ?>
<?php

$resultado
=dataSelect();

 
?>
Me está volviendo loco y no avanzo
  #2 (permalink)  
Antiguo 16/05/2013, 06:10
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Error si llamo dentro de una función

Quita la @, comprueba que hay conexión y los valores de las variables. Salu2


Código PHP:
Ver original
  1. function dataSelect(){
  2.  
  3.     if(!$connection= mysqli_connect($host,$user,$pass,$base)) die("No hay conexión");
  4.  
  5.     $query="SELECT * FROM medios;";
  6.     if(!$result=mysqli_query($connection,$query)) die("Query falla");
  7.     $array=mysqli_fetch_all($result,MYSQLI_ASSOC);
  8.  
  9.     mysqli_free_result($result);
  10.         mysqli_close($connection);
  11.  
  12.     return $array;
  13. }
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 16/05/2013, 06:41
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años
Puntos: 2
Respuesta: Error si llamo dentro de una función

Gracias repara2, eso ya lo probé, lo quité del código por simplificar, y la query falla, el caso es que si ejecuto esto:

Código PHP:
<?php require_once("private/connection.php"?>
<?php
    
@$connectionmysqli_connect($host,$user,$pass,$base);

    
$query="SELECT * FROM medios";
    
$result=mysqli_query($connection,$query);
    
$array=mysqli_fetch_all($result,MYSQLI_ASSOC);

    
mysqli_free_result($result);
    
mysqli_close($connection);

    
print_r($array);

?>
funciona correctamente, solo falla si lo llamo dentro de la función y es lo que no acabo de comprender.
Inicialmente lo hice también con objetos, y me daba el mismo problema, así que fui simplificando para intentar encontrar el error, pero más sencillo ya no se puede hacer.

Última edición por kikerrobles; 16/05/2013 a las 07:01 Razón: punto y coma añadido por error al pegar
  #4 (permalink)  
Antiguo 17/05/2013, 01:01
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Error si llamo dentro de una función

DENTRO de la función las variables $host, $user, etc... no están definidas, por tanto no hay conexión. Como utilizas @ para ocultar errores no ves que falla.
Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 17/05/2013, 05:03
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 11 años
Puntos: 2
Respuesta: Error si llamo dentro de una función

Correcto repara2, muchas gracias. Me di cuenta ayer en una de las muchas pruebas que hice, hacía tiempo que no programaba y no tuve en cuenta el scope de las variables, y como la conexión no daba error la daba por buena.

Ahora esto funciona como yo quería, lo dejo por si a alguien le viene bien verlo resuelto:

En private/connection.php están las variables $host, $user, etc. $fields es un array de los campos que quiero visualizar, y createCommaSeparatedString($fields) es una función que me devuelve el array $fields en valores separados por comas.

Código PHP:
<?php require_once("private/connection.php"?>
<?php

function connectDataBase(){

    global 
$host,$user,$pass,$base;

    
$connectionmysqli_connect($host,$user,$pass,$base);
        if (
mysqli_connect_errno()) {
                
printf("Conexión fallida: %s\n"mysqli_connect_error());
            exit();
        }
    
mysqli_set_charset($connection,"utf8");
    return 
$connection;
}

function 
closeDataBase($connection){

    
mysqli_close($connection);
}


function 
dataSelect($table,$fields,$where){

    
$connection=connectDataBase();

    
$fieldsToText=createCommaSeparatedString($fields);

    
$query="SELECT ".$fieldsToText;
    
$query.=" FROM ".$table" WHERE ".$where;

    echo 
$query;

    
$result=mysqli_query($connection,$query);
    
$array=mysqli_fetch_all($result,MYSQLI_ASSOC);

    
mysqli_free_result($result);
    
closeDataBase($connection);

    return 
$array;
}
?>
Saludos

Etiquetas: mysql, resultados, select, sql
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 15:13.