Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Utilizar una query dentro de una clase

Estas en el tema de Utilizar una query dentro de una clase en el foro de PHP en Foros del Web. Buenas, como puedo utilizar una query dentro de una clase? La query me funciona fuera de la clase. Saludos Tengo esta conexion mysqli. Código PHP: ...
  #1 (permalink)  
Antiguo 28/01/2015, 11:00
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 1 mes
Puntos: 2
Utilizar una query dentro de una clase

Buenas, como puedo utilizar una query dentro de una clase?

La query me funciona fuera de la clase.

Saludos

Tengo esta conexion mysqli.
Código PHP:
require_once("/config/config.php");

$connect = new mysqli$server$user$password$db ); 
Esta clase
Código PHP:
require_once("/includes/connection.php");
class 
Menu
{
    public function 
getMenu()
    {
        echo 
"dew";
        
$consulta "SELECT * FROM menus";
        
$resultado $connect->query($consulta);
        
var_dump($resultado);
    }

Esto es el error que me aparece.

Cita:
Notice: Undefined variable: connect in C:\xampp\htdocs\venfaq2015\class\Menu.php on line 9

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\venfaq2015\class\Menu.php on line 9
  #2 (permalink)  
Antiguo 28/01/2015, 11:08
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 9 años, 6 meses
Puntos: 12
Respuesta: Utilizar una query dentro de una clase

Hola manelmanel8, prueba con este ejemplo.

Archivo donde realizo la conexión a la base de datos
Código PHP:
Ver original
  1. <?php
  2. class Conectar
  3. {
  4.     /**
  5.      * Conectar::Con()
  6.      *
  7.      * @return la conexion a la base de datos
  8.      */
  9.     public function Con()
  10.     {
  11.         $con=mysql_connect("localhost", "root", "root");
  12.         mysql_select_db("sideyc");
  13.         mysql_query("SET NAMES 'utf8'");
  14.         //mysql_query("SET NAMES 'iso-8859-1'");
  15.         return $con;
  16.     }
  17.  
  18.     /**
  19.      * Conectar::DesCon()
  20.      *
  21.      * @return void, cierra la conexion a la db
  22.      */
  23.     public function DesCon()
  24.     {
  25.         mysql_close();
  26.     }
  27. }
  28. ?>

Clase donde realizo los query y demás
Código PHP:
Ver original
  1. <?php
  2. class Estructura extends Conectar // Aquí hacer la herencia de la clase conectar
  3. {
  4.     private $sql;
  5.     private $res;
  6.     private $reg = array();
  7.     private $cant;
  8.    
  9.     /**
  10.      * Estructura::ValidEstructura()
  11.      *
  12.      * @param mixed $val
  13.      * @return valida si la extructura ya existe
  14.      */
  15.     public function ValidEstructura($val)
  16.     {
  17.         parent::Con(); // Acá llamo a la funcion con que abre la conexion a la base de datos
  18.                
  19.         $this->sql=sprintf
  20.         (
  21.             "select * from tbl_estructuras where DescEstructura = %s and Activo = 1",
  22.             parent::ScapeString($estructura)
  23.         );
  24.        
  25.         $this->res=mysql_query($this->sql);
  26.         $this->cant=mysql_num_rows($this->res);
  27.        
  28.         parent::DesCon(); // Aca cierro la conexion utilizando la funcion de la calse Conectar
  29.        
  30.         if($this->cant >= 1) {
  31.             return 1;
  32.         }else {
  33.             return 0;
  34.         }
  35.     }
  36. }
  37. ?>

Modificalo a tus necesidades.

Saludos.
__________________
http://www.sp-vision.net
  #3 (permalink)  
Antiguo 28/01/2015, 11:24
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Utilizar una query dentro de una clase

mauritosuarez la librería mysql ya esta obsoleta, en su lugar se recomienda el uso de mysqli o pdo.

Respondiendo a la pregunta, para que puedas hacer uso de la conexión en la clase debes de pasarla como parámetro en los métodos o el constructor, te dejo un ejemplo usando el constructor.
Código PHP:
Ver original
  1. require_once("/includes/connection.php");
  2.  
  3. class Menu
  4. {
  5.    
  6.     private $conexion;
  7.  
  8.     public function __construct($conexion)
  9.     {
  10.         $this->conexion = $conexion;
  11.     }
  12.    
  13.     public function getMenu()
  14.     {
  15.         echo "dew";
  16.         $consulta = "SELECT * FROM menus";
  17.         $resultado = $this->conexion->query($consulta);
  18.         var_dump($resultado);
  19.     }
  20. }
  21.  
  22. //uso
  23. $menu = new Menu($connect);
  24. $menu->getMenu();
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 28/01/2015, 11:27
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 9 años, 6 meses
Puntos: 12
Respuesta: Utilizar una query dentro de una clase

Hola hhs, se que esta obsoleta, solo puse el código de ejemplo, por eso puse Modificalo a tus necesidades.

Saludos.
__________________
http://www.sp-vision.net
  #5 (permalink)  
Antiguo 28/01/2015, 16:09
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Utilizar una query dentro de una clase

Intente hacer una mezcla de los dos y me sale lo siguiente.

Cita:
Fatal error: Call to undefined function connect() in C:\xampp\htdocs\2015\class\Connection.php on line 31
Tendría que imprimir algun echo del if o del else no?

Código PHP:
<?php
class Connection
{
    private 
$server;
    private 
$user;
    private 
$password;
    private 
$db;

    public function 
__construct()
    {
        
$this->server "localhost";
        
$this->user "root";
        
$this->password "";
        
$this->db "database";
    }

    public function 
connect()
    {
        
$connect = new mysqli$this->server$this->user$this->password$this->db );
        if(
$connect->connect_errno){
            die(
'No se pudo conectar a la BBDD');
        }else{
            echo 
'Conexión realizada';
        }
        return 
$connect;
    }
}

$conexion = new Connection();
$conexion connect();
Gracias

Última edición por manelmanel8; 28/01/2015 a las 16:33
  #6 (permalink)  
Antiguo 28/01/2015, 17:35
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Utilizar una query dentro de una clase

Cambia esto:
Código PHP:
Ver original
  1. $conexion = new Connection();
  2. $conexion = connect();
Por lo siguiente:
Código PHP:
Ver original
  1. $conexion = new Connection();
  2. $con = $conexion->connect();
Procura leer esta parte del manual: http://php.net/manual/en/language.oop5.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 29/01/2015, 03:20
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Utilizar una query dentro de una clase

Gracias funciona, la ultima pregunta.

Ahora mismo tengo el codigo de esta forma, pero si quito las variables en private funciona correctamente no? Mi pregunta es la siguiente, la pongo más abajo.
Código PHP:
    private $server;
    private 
$user;
    private 
$password;
    private 
$db;

    public function 
__construct()
    {
        
$this->server "localhost";
        
$this->user "root";
        
$this->password "";
        
$this->db "database";
    } 
Si modifico el codigo y lo pongo de esta forma, aparecen un monton de warning y notice y no entiendo el porque. Yo diria que de esta forma esta bien.

Código PHP:
    private $server  "localhost";
    private 
$user "root";
    private 
$password "";
    private 
$db "database";

    public function 
__construct$server$user$password$db 
    {
        
$this->server $server;
        
$this->user $user;
        
$this->password  $password;
        
$this->db $db;
    } 
Cita:
Warning: Missing argument 1 for Connection::__construct(), called in C:\xampp\htdocs\2015\class\Connection.php on line 29 and defined in C:\xampp\htdocs\2015\class\Connection.php on line 9

Warning: Missing argument 2 for Connection::__construct(), called in C:\xampp\htdocs\2015\class\Connection.php on line 29 and defined in C:\xampp\htdocs\2015\class\Connection.php on line 9

Warning: Missing argument 3 for Connection::__construct(), called in C:\xampp\htdocs\2015\class\Connection.php on line 29 and defined in C:\xampp\htdocs\2015\class\Connection.php on line 9

Warning: Missing argument 4 for Connection::__construct(), called in C:\xampp\htdocs\2015\class\Connection.php on line 29 and defined in C:\xampp\htdocs\2015\class\Connection.php on line 9

Notice: Undefined variable: server in C:\xampp\htdocs\2015\class\Connection.php on line 11

Notice: Undefined variable: user in C:\xampp\htdocs\2015\class\Connection.php on line 12

Notice: Undefined variable: password in C:\xampp\htdocs\2015\class\Connection.php on line 13

Notice: Undefined variable: db in C:\xampp\htdocs\2015\class\Connection.php on line 14
  #8 (permalink)  
Antiguo 29/01/2015, 06:07
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Utilizar una query dentro de una clase

De ese modo, tendrías que pasar las variables a la hora de instanciar el objeto

Ej:
Código PHP:
$conexion = new Connection("localhost""root""""database");
$con $conexion->connect(); 
__________________
>> Eleazan's Source
>> @Eleazan

Etiquetas: clase, mysql, query, select, variable
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 13:09.