Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Llamados a funciones en PHP

Estas en el tema de Llamados a funciones en PHP en el foro de PHP en Foros del Web. Tengo el siguiente codigo: Código PHP: function  conectarse (){     include( "config.php" );      $mysqli  = new  mysqli ( $host ,  $user ,  $password ,  $db ); ...
  #1 (permalink)  
Antiguo 09/08/2013, 10:46
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Exclamación Llamados a funciones en PHP

Tengo el siguiente codigo:

Código PHP:
function conectarse(){
    include(
"config.php");
    
$mysqli = new mysqli($host$user$password$db);
    return 
$mysqli;        
}

function 
funcion1(){
    
$mysqli conectarse();
    
    
$query $mysqli->query("bla bla bla bla bla");
}

function 
funcion2(){
       
$query $mysqli->query("bla bla bla bla bla");
}

function 
funcion3(){
        
$query $mysqli->query("bla bla bla bla bla");
}

$mysqli conectarse(); 
Como veran en la funcion1 no hay problema porque vuelvo a llamar a funcion conectarse()

En las demás me da un error de variable no definida:

Undefined variable: mysqli in C:\wamp\www\administrativo\bin\php.php on line

Me pregunto lo siguiente, estoy llamando a mi función conectarse() al final, lo he colocado después de declarar la funcion y en varias partes de mis codigos, solo quiero hacer un solo llamado a la funcion conectarse, para evitar esto:

Código PHP:
function conectarse(){
    include(
"config.php");
    
$mysqli = new mysqli($host$user$password$db);
    return 
$mysqli;        
}

function 
funcion1(){
    
$mysqli conectarse();// aqui
    
    
$query $mysqli->query("bla bla bla bla bla");
}

function 
funcion2(){
       
$mysqli conectarse();// aqui
       
$query $mysqli->query("bla bla bla bla bla");
}

function 
funcion3(){
       
$mysqli conectarse();// aqui
        
$query $mysqli->query("bla bla bla bla bla");
}

$mysqli conectarse(); 
Algun consejo?
  #2 (permalink)  
Antiguo 09/08/2013, 11:00
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Llamados a funciones en PHP

Hola en PHP puedes usar el ámbito de variables este seria un EJEMPLO de como PODRIAS usarlo, ten en cuenta de que le faltan muchos aspectos de tenerse en cuenta pero la idea del funcionamiento es la misma

Código PHP:
Ver original
  1. <?php
  2. global $mysqli;
  3.  
  4. function conectarse(){
  5.     include("config.php");
  6.     $GLOBALS['mysqli'] = new mysqli($host, $user, $password, $db);    
  7. }
  8.  
  9. function funcion1(){
  10.     $query = $GLOBALS['mysqli']->query("bla bla bla bla bla");
  11. }
  12.  
  13. function funcion2(){
  14.     $query = $GLOBALS['mysqli']->query("bla bla bla bla bla");
  15. }
  16.  
  17. function funcion3(){
  18.     $query = $GLOBALS['mysqli']->query("bla bla bla bla bla");
  19. }
  20. //llamamos esta funcion ANTES de USAR las funciones que dependan de $mysqli
  21. conectarse();

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 09/08/2013, 11:04
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

Oka, me parece interesante, precisamente estaba bordeando los manuales sobre variables locales, ya lo pruebo!
  #4 (permalink)  
Antiguo 09/08/2013, 11:06
 
Fecha de Ingreso: marzo-2013
Ubicación: Cali
Mensajes: 12
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Llamados a funciones en PHP

Me parecería mejor que lo encerraras en una clase, así lo estancias una sola vez y luego en cada página solo será hacer un llamado a la estancia y la función, guardando la conexión en una variable publica de la clase:

Código PHP:
class db{
  public 
$con = new mysqli($host$user$password$db);

  
//Llamado dentro de la clase
  
$this->con;
}
//Llamado fuera
$db=new db();
$db->con
  #5 (permalink)  
Antiguo 09/08/2013, 11:08
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

Perfecto jonni09lo, funciono de maravilla. Me gustaría que me menciones esos aspectos que menciones para evitar problemas a futuro!
  #6 (permalink)  
Antiguo 09/08/2013, 11:10
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

A ver ChrisPio, también me gusta tu propuesta, ya la programo
  #7 (permalink)  
Antiguo 09/08/2013, 11:33
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Llamados a funciones en PHP

Hola el principal problema es lo que menciona @ChrisPio al ser un código para ingresar a la base de datos es mejor trabajar con clases yo te respondí de la manera como lo hice por dos razones: la primera para que veas el asunto del ámbito y la segunda porque tu código inicial es programación estructurado y es bueno que vayas viendo que existen soluciones variadas a los problemas que se plantean, así NO sea lo mas adecuado ya que como dice un viejo amigo: Si se puede imaginar se puede programar


Has trabajado con clases?
Sabes sobre patrones de diseño?

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 09/08/2013, 13:32
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

Tengo años trabajando en programación estructurada, desde el bachillerato cuando empece en esto, manejo ajax, JS, jQuery, etc. Pero no se porque no logro entender la POO, algún foro con un tema de conexión a BD usando MySQLi y POO?
  #9 (permalink)  
Antiguo 09/08/2013, 13:35
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

@jonni09lo tiene razón tu amigo, "Si se puede imaginar se puede programar" me gusta lo usare porque es verdad, tengo algo de experiencia con clases, y que patrones de diseño me hablas? UML, diagramas, etc?
  #10 (permalink)  
Antiguo 09/08/2013, 14:43
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

Listo. Ya le encontré la solución a esto con POO gracias mis amigazos!
  #11 (permalink)  
Antiguo 09/08/2013, 15:18
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Llamados a funciones en PHP

Hola perdón la demora me ocupé a último momento... te hablaba de clases porque puedes hacer perfectamente esto:

Código PHP:
Ver original
  1. <?php
  2. class db{
  3.     private $host = 'localhost';
  4.     private $db = 'prueba';
  5.     private $user = 'root';
  6.     private $pass = '';
  7.    
  8.     private $conex;
  9.    
  10.     public function __construct(){
  11.         try{
  12.             $this->conex = new PDO('mysql:host='.$this->host.';dbname='.$this->db.'', $this->user, $this->pass);
  13.         }catch(Exception $e){
  14.             echo $e->getMessage();
  15.         }
  16.     }
  17.    
  18.     public function query($sql){
  19.         $this->conex->query($sql);
  20.     }
  21. }
  22.  
  23. //llamamos a la clase de esta manera
  24.  
  25. $db = new db();
  26. $sql = 'bloa bla bla';
  27. $db->query($sql);

Y con lo anterior tendrás lo mismo que estabas tratando de hacer pero con POO y PDO ten en cuenta lo siguiente:

1. Tus consultas deben de llevar prepare y execute para evitar inyecciones sql
2. Depura tu código y separa las consultas que se ejecutan solamente y devuelven boleanos (update, delete) o el id del insert (usando lastInsertId de PDO) de las que retornan datos (select)
3. Ten en cuenta de que POO se hizo para reusar el código asi que todo lo que haga exactamente lo mismo lo puedes volver función

Esos son algunos consejos... por último te hable de patrones de diseño para decirte que en los casos de conexiones a la bd es muy util usar SINGLETON

Así que con esto tienes buen material para que practiques y mejores

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #12 (permalink)  
Antiguo 09/08/2013, 16:10
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Llamados a funciones en PHP

Oka, me hice esto. Tengo un archivo

config.php

Código PHP:
<?php
$host 
"localhost";
$user "root";
$password "";
$db "administrativo";
?>
Tengo mi archivo php.php donde pienso tener tooodas mis funciones y clases en php
PD. Aun estoy terminando este archivo, es un pequeño proyecto personal sobre un sistema que quiero llevar a cabo porque en verdad me gusta esto y desde hace tiempo estoy buscando pasar a mysqli, POO y PDO, hasta los momentos me funciona, aqui les va

Código PHP:
<?php
session_start
();
date_default_timezone_set("America/Caracas");

//conf principalmente me trae los valores del archivo config.php
class Conf{
    private 
$_user;
    private 
$_password;
    private 
$_host;
    private 
$_database;
    
    static 
$_instance;
    
    private function 
__construct(){
        require(
"config.php");
        
$this->_user=$user;
        
$this->_password=$password;
        
$this->_host=$host;
        
$this->_database=$db;
    }
    
    public static function 
getInstance(){
        if(!(
self::$_instance instanceof self)){
            
self::$_instance = new self;
        }
        return 
self::$_instance;
    }
    
    public function 
getUserDB(){
        
$var $this->_user;
        return 
$var;
    }
    
    public function 
getHostDB(){
        
$var $this->_host;
        return 
$var;
    }
    
    public function 
getPassDB(){
        
$var $this->_password;
        return 
$var;
    }
    
    public function 
getDB(){
        
$var $this->_database;
        return 
$var;
    }
}

class 
Db{
    private 
$servidor;
    private 
$usuario;
    private 
$password;
    private 
$database;
    private 
$conex;
    
    static 
$_instance;
    
    private function 
setConexion(){
        
$conf Conf::getInstance();
        
$this->servidor=$conf->getHostDB();
        
$this->database=$conf->getDB();
        
$this->usuario=$conf->getUserDB();
        
$this->password=$conf->getPassDB();
    }
    
    private function 
__construct(){
        
$this->setConexion();

        
//gracias a mi amigo @jonni09lo de www.forosdelweb.com
        
try{
            
$this->conex = new PDO('mysql:host='.$this->servidor.';dbname='.$this->database.''$this->usuario$this->password);
        }catch(
Exception $e){
            echo 
$e->getMessage();
        }
    }
    
    public function 
ejecutar($sql){
        
$this->conex->query($sql);//gracias a mi amigo @jonni09lo de www.forosdelweb.com
    
}
    
    public static function 
getInstance(){
        if(!(
self::$_instance instanceof self)){
            
self::$_instance = new self();
        }
        return 
self::$_instance;
    }
    
}

function 
getUbicacionCliente(){
    
    
$ip $_SERVER["REMOTE_ADDR"];
    
$bd Db::getInstance();//instancia de Db (buena idea para que se vea complejo el codigo no? Lo vi por alli)
    
$stmt $bd->ejecutar("select * from maquinas_ubicaciones");//gracias a mi amigo @jonni09lo de www.forosdelweb.com

}
//ejecutandose (funciones que siempre estaran en ejecucion, como un reloj o elaboracion de respaldos automaticos a ciertas cosas o cualquier cosa que se me ocurra a un tiempo)
Creo que se ve bien y tambien funciona bien, se me escapa algo? Que dicen?

Etiquetas: funciones, mysql+consulta, mysqli
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:42.