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:
funciones.php<?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; } } ?>
Código:
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.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; } } ?>
mi archivo index.php
Código:
Llevo días tratando de solucionar esto. Soy un novato en PHP OO pero creo haber logrado hartos avances en este poco tiempo.//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\">"; } }
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!!