Ver Mensaje Individual
  #7 (permalink)  
Antiguo 18/06/2018, 12:05
Avatar de KATHYU
KATHYU
 
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Dudas con PHP y POO !!!

Trabaje en entender un poco mas y logre hacer que mi clase funcione, y ya con una SELECT a la DB

database.php
Código PHP:
Ver original
  1. <?php
  2.     // error_reporting(0);
  3.     require_once(DIR_ROOT.SLASH.'loader.php');
  4.  
  5.     class DBM{
  6.         private $MySQLi;
  7.         // Para llamar al metodo privado conectar()
  8.         public function conexion()
  9.         {
  10.             return self::conectar();
  11.         }
  12.  
  13.         // Metodo provado donde hacemos la conexion a la DB
  14.         private function conectar(){
  15.             $MySQLi = $this->mysqli = new MySQLi (DB_HOST,DB_USER,DB_PASS,DB_DATABASE);
  16.  
  17.             if ($MySQLi->connect_errno){
  18.                 $MySQLi_error = $MySQLi->connect_error;
  19.                 $response = '<b>Error al conectar al Servidor !!!<br>Error '.$MySQLi->connect_errno.':</b> '.$MySQLi_error;
  20.                 echo $response;
  21.             }
  22.             else{
  23.                 $MySQLi->set_charset('utf8');
  24.                 // var_dump($this->mysqli);
  25.                 // $response .= $this->mysqli->host_info . "<br>";
  26.                 // $response .= 'Conectado al Servidor: <b>'.DB_HOST.'</b><br>';
  27.                 // $response .= 'Base de Datos: <b>'.DB_DATABASE.'</b><br>';
  28.  
  29.                 // $response .= ('Conjunto de caracteres de la Base de Datos es: <b>'.$this->mysqli->character_set_name().'</b><br>');
  30.                 // echo $response;
  31.             }
  32.         }
  33.  
  34.         // Metodo publico para desconectarnos
  35.         public function desconectar(){
  36.             $MySQLi = $this->mysqli;
  37.  
  38.             // Si hay una conexion, la cerramos
  39.             if (isset($MySQLi)) {
  40.                 $cerrar = $MySQLi->close();
  41.                 unset($MySQLi);
  42.                 // if ($cerrar) {
  43.                 //     $response = '<hr>Conexion a la Base de Datos Cerrada !!!';
  44.                 //     return $response;
  45.                 // }
  46.                 // else{
  47.                 //     $response = '<hr>La Conexion a la Base de Datos sigue Abierta !!!';
  48.                 //     return $response;
  49.                 // }
  50.             }
  51.             // else{
  52.             //     $response = 'Conexion no esta definida';
  53.             //     return $response;
  54.             // }
  55.         }
  56.  
  57.         // Metodo para hacer Querys
  58.         public function query_function($sql){
  59.             $MySQLi = $this->mysqli;
  60.             if (trim($sql != '')) {
  61.                 $result_set = $MySQLi->query($sql); // Linea 61
  62.             }
  63.             if (!$result_set) {
  64.                 echo '<br>Error en consulta :<pre> ' . $sql .'</pre>';
  65.             }
  66.             return $result_set;
  67.         }
  68.  
  69.         public function get_users(){
  70.             $sql = 'SELECT nombre FROM usuarios';
  71.             $result = $this->query_function($sql);
  72.             $users = $result->fetch_all(MYSQLI_ASSOC);
  73.  
  74.             return $users;
  75.         }
  76.     }
  77.  
  78.     // Instanciamos la clase DBM = DataBaseManager
  79.     $dbm = new DBM();
  80. ?>

Si hago un $users = $dbm->get_users(); me retorna los usuarios.

El problema es que quiero hacer las consultas desde un archivo aparte, osea tener el database.php unico y exclusivo para funciones de la base de datos y el querys.php para las consultas. Entonces hice un nuevo archivo y una clase para hacer el query

querys.php
Código PHP:
Ver original
  1. <?php
  2.     require_once(DIR_ROOT.SLASH.'loader.php');
  3.  
  4.     class Query{
  5.         public function get_users(){
  6.             $sql = 'SELECT nombre FROM usuarios';
  7.             $result = DBM::query_function($sql); // OJO que estoy llamando de un solo al método query_function con instanciacion rápida DBM::
  8.             $users = $result->fetch_all(MYSQLI_ASSOC);
  9.  
  10.             return $users;
  11.         }
  12.     }
  13.     // Instanciamos la clase Query
  14.     $query = new Query();
  15. ?>

Pero hal hacer $users = $query->get_users(); me da error
Cita:
Fatal error: Call to a member function query() on null in \root\class\database.php on line 61
La linea 61 del database.php es la que tiene este código $result_set = $MySQLi->query($sql);

Como puedo hacer para "conectar" las dos clases ?? Ya use extends y nada, instancie en querys.php la clase DBM y nada
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.