Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/10/2015, 20:44
Avatar de SCY-FOX
SCY-FOX
 
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 17 años, 3 meses
Puntos: 5
Pregunta Cómo recuperar y enviar el objeto que trae la respuesta de MySQLi

Hola, que tal.
Mucho tiempo sin hacer PHP han pasado la cuenta y estoy pegado en un problema hace un par de días.

Tengo un seudo CMS que construí hace mucho tiempo en php 5.0.
Ahora estoy en proceso de transformarlo y adecuarlo a las nuevas llamadas de MySQLi además de pasar de un formato estructurado normal a php OO.

Por un asunto de TOC (transtorno obsesivo compulsivo), quiero dejar la conexión a la BD en una clase en un archivo (conexion.php), tener un archivo con las clases y métodos de trabajo de este cms (funciones.php) y por otro lado un archivo index.php que sólo tenga en su mayoría, html sin tanto código php sólo el justo y necesario.

Hasta ahora, la conexión a la BD, funciona.
Y he podido enviar entre objetos el link de mysqli para poder ejecutar consultas.

Lo que NO puedo hacer es recuperar los datos en forma de array y poder retornarlos al lugar desde donde fue instanciado el objeto y generada la llamada al método.

Les pego mi código.

Conexion.php
Código:
<?php
    class DB {

        //Atributos
        private $errores;

        public $mysqli;
        

        //Metodos

        function __construct($errores = array()) {
            $this -> errors = $errores;
            $this -> conectar();
        }

        function conectar() {
            $servidor = "localhost";
            $usuario = "mcfly";
            $password = "123456";
            $database = "greatscott";

            if ($this -> mysqli == null)
            {
                $this -> mysqli = new mysqli($servidor, $usuario, $password, $database);
                
                if ($this->mysqli->connect_errno > 0)
                {
                    die('No puedo conectarme por [' . $this->mysqli->connect_error . ']');
                }
            }
            return $this -> mysqli;
        }
    }
?>
funciones.php

Código:
class FuncionesSitio {

	//Atributos
   	private $DB;

  	 public function __construct(DB $DB) {
     $this->DB = $DB;     
   }

   	//Metodos


       //Validacion Usuarios

	public function validarUsuario($username,$password){

		$respuesta = array();

		$query = "SELECT nombre, apellido, tipousuario  FROM m_usuarios WHERE username = ? AND password = ?";	


		$stmt = $this->DB->mysqli->stmt_init();
		
		if ($stmt = $this->DB->mysqli->prepare($query)) {			

			$stmt->bind_param("ss",$username, $password);
			$stmt->execute();
			$stmt->store_result();
			$stmt->bind_result($nombre, $apellido, $tipousuario);
			$meta = $stmt->num_rows();

			echo "Filas valor: " . $meta . "<br>";
						
		        while($stmt->fetch()) {
		            	$respuesta[] = $nombre . "|" . $apellido;
		        } 
				//Vaciar Recursos
				//$stmt->free_result();
		} else {
				    echo "Problemas realizando la consulta: [" . $this->DB->mysqli->error . "]";
				    die();
		}
		return $respuesta;
		
	}
}
?>
El problema de arriba es esa es la única forma en que he podido recuperar los valores de la BD usando Preparated Statements, haciendo un array separado por "palitos" | que después tendré que volver a limpiar.

mi archivo index.php

Código:
//Conecta a BD testing
include("config/conexion.php");
include("libreria/funciones.php");

//Nuevo Objeto de DB
$DB = new DB();

//Asigno el link a la BD a mi clase de funciones de página
$FS = new FuncionesSitio($DB);

session_start();

if (isset($_POST["enviar"])) {

	$username = $_POST["holi"];
	$password = $_POST["crayoli"];

	if ($valor[] = $FS->validarUsuario($username, $password) ) {
		
		//Si hay usuario, dame sesiones mamita
		$_SESSION['user_sitio'] = "ON";

		echo "Valores de Sesiones <br>";

		$_SESSION['nombre_user'] = $valor[1];
		$_SESSION['apellido_user'] = $valor[2];
		$_SESSION['privilegio_user'] = $valor[4];
		
		//Avísame que conectaste
		echo " <br>ARCHIVO INDEX - YEAH BABY<br>";
		echo $valor[1];
		foreach ($valor as $val) {
			echo $val;
		}

		//Envíame al admin con sesiones activas
		echo "<script>window.location=\"admin.php\";</script>";			

	} else {
//		die();
		echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=index.php?e=incorrecto\">"; 

	}

}
Llevo días tratando de solucionar esto. Soy un novato en PHP OO pero creo haber logrado hartos avances en este poco tiempo.

Si pueden ayudarme o darme algunos tips sobre poder recibir correctamente la info desde bd al hacer la pregunta con mysqli y "statements" preparados podría seguir y realizar las demás acciones básicas como editar, agregar o borrar...

HELP!!