En el desarrollo que estoy haciendo de un sitio web, estoy usando por primera vez los mysqli prepare y execute para manejar la BD. He conseguido sin excesiva dificultad hacer inserts, y hacer SELECTs sobre un único resultado. Mi problema viene cuando quiero obtener varios resultados de la base de datos.
En el desarrollo que hago planteo todas las interacciones con la base de datos en una clase llamada DBMethods, por comodidad si algún día otro desarrollador necesita modificar cualquier consulta están todas ahí encapsuladas.
Soy capaz de ejecutar la sentencia y recorrer cada uno de los elementos encontrados dentro de la propia clase pero soy incapaz de devolverle dichos resultados al archivo desde el que se llama a la clase pego código a ver si así me explico mejor
Primero pegaré el código que funciona perfectamente y luego explico lo que quiero hacer y no soy capaz:
archivo desde el que hago la llamada a la consulta (llamada pruebas por motivos evidentes)
Código PHP:
<?php
include("DBMethods.php");
$db = new DBMethods();
$db->pruebas();
Código PHP:
private function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);
}
public function pruebas(){
if ($stmt = $this->link->prepare("SELECT * FROM accesos")) {
if($stmt->execute()){
$row= array();
$this->stmt_bind_assoc($stmt, $row);
while ($stmt->fetch()) {
echo "Acceso $row[id] - $row[rango]<br/>";
}
}
else{
$stmt->close();
return $false;
}
}
}
Código HTML:
Acceso 1 - ADMINISTRADOR Acceso 2 - REVENDEDOR Acceso 3 - COMERCIAL Acceso 4 - COMERCIAL-LIMITADO
Es decir algo así, aunque ya se que esto no funciona es únicamente para ilustrarlo:
Código PHP:
private function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);
}
public function pruebas(){
if ($stmt = $this->link->prepare("SELECT * FROM accesos")) {
if($stmt->execute()){
$row=array();
$this->stmt_bind_assoc($stmt, $row);
return $stmt;
}
else{
$stmt->close();
return $false;
}
}
}
Código PHP:
<?php
include("DBMethods.php");
$db = new DBMethods();
$accesos=$db->pruebas();
while ($accesos->fetch()) {
echo "Acceso $row[id] - $row[rango]<br/>";
}
Un saludo