entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

devuelve nulo al hacer consulta SQL con PHP

Hola de nuevo. Tengo un problema con una consulta SQL en la web que estoy creando.
Me devuelve el siguiente error al hacer la consulta:

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /Applications/XAMPP/xamppfiles/htdocs/blue/index.php on line 179.

La consulta no devuelve nada, y no se por que... he mirado y remirado a ver si todo los campos eran exactos, y esta todo bien.
Pongo los archivos que utilizo para la conexión, y que siempre me han ido perfectamente para otras conexiones de otras webs, aunque la conexión la hace bien, por que no es ahí donde salta el error:
conexion.php

    <?php 
class Conector{
    var $conect;
    var $BaseDatos;
    var $Servidor;
    var $Usuario;
    var $Clave;

    function Conector(){
        $this->BaseDatos = "jim";
        $this->Servidor = "localhost";
        $this->Usuario = "root";
        $this->Clave = "";

    }

    function conectar() {
            //MySQLi
        $mysqli = new mysqli($this->Servidor,$this->Usuario,$this->Clave,$this->BaseDatos);
        if ($mysqli -> connect_errno) {
        die( "Falla la conexión a MySQL: (" . $mysqli -> mysqli_connect_errno() 
        . ") " . $mysqli -> mysqli_connect_error());
        }
    }

}
?>

basedatos.php

    <?php 
include_once("conexion.php");

class BaseDatos{
    //constructor   
    var $con;
    function BaseDatos(){
        $this->con=new Conector;
    }

    function Consultar($q){
        if($this->con->conectar()){
            mysql_query("SET NAMES 'utf8'");
            return mysql_query($q);
        }
    }

}
$bd = new BaseDatos;
?>

Así lo tengo en el index.php
la llamada al archivo:

<?php 
    require_once('assets/utils.php');
?>

(en el utils.php hago la llamada al basedatos.php)
y la consulta:

<div class="row">

                    <?php
                     $qRead = $bd->Consultar("select * from projects");
                     while( $pop = mysql_fetch_array($qRead) ){?>

                    <div class="custom_port col-lg-3 col-md-4 col-sm-6 col-xs-12 ">
                        <a href="portfolio.php/<?php echo $pop['id'] ?>/<?php echo urls_amigables($pop['autor'])?>">
                        <div class="portfolio-wrapper custom_h3">   
                            <h3><?php echo $pop['titulo'] ?></h3>   
                            <a class="b-link-stripe b-animate-go  thickbox">
                                <img src="admin/<?php echo $pop['imagen'] ?>">
                                 <div class="b-wrapper">
                                    <h2 class="b-animate b-from-left b-delay03 "></h2>
                                </div>
                            </a>
                            <p><?php echo $pop['sumario'] ?></p>
                        </div>
                    </div>  

                    <?php
                       }
                     ?>

                 </div>

El error salta en esta línea: while( $pop = mysql_fetch_array($qRead) ){?>
pongo una imagen de la BD para que vean que esta implementada:
enter image description here

0voto

jsstoni comentado

http://php.net/manual/es/book.mysqli.php documentacion sobre mysqli

1 Respuesta

3votos

white Puntos75880

Hola @nachito777sk, te comento los errores que encontré en tu código:

en tu fichero conexion.php la clase Conector abre una conexion con mysqli pero en tu clase BaseDatos usas msyql_query, esta funcion necesita una conexion con mysql_connect, estas mezclando mysqli con mysql

entonces,

guarda una variable en tu clase Conector que guarde la instancia de mysqli

class Conector{

    public $mysqli = null;

el método conectar() de la clase Conector queda así:

function conectar() {
    //MySQLi
    $this->mysqli = new mysqli(
        $this->Servidor,
        $this->Usuario,
        $this->Clave,
        $this->BaseDatos
    );

    if ($this->mysqli->connect_errno)
    {
        die
        (
            "Falla la conexión a MySQL: (" .
            $this->mysqli -> mysqli_connect_errno() . 
            ") " . $this->mysqli -> mysqli_connect_error()
        );
    }
}

En tu clase BaseDatos, en el método consultar el metodo conectar de la clase Conector no regresa un booleano, el if estaría demás.

tu fichero basedatos.php debería quedar asi:

<?php 
    include_once("conexion.php");

    class BaseDatos{
        //constructor   
        var $con;

        function BaseDatos()
        {
            $this->con=new Conector;
            $this->con->conectar();
        }

        function Consultar($q)
        {
            $this->con->mysqli->query("SET NAMES 'utf8'");
            $query = $this->con->mysqli->query($q);

            return $query;
        }
    }

    $bd = new BaseDatos;

En el fichero utils.php en la línea while( $pop = mysql_fetch_array($qRead) ){?> estas usando mysql_fetch_array, como dije arriba, estas mezclando mysqli con mysql lo correcto es usar el metodo de mysqli "fetch_array()"

la forma en que deberías hacer la consulta y recorrer los valores seria de esta forma:

<?php
 $qRead = $bd->Consultar("select * from projects");
 while( $pop = $qRead->fetch_array() ){ ?>

saludos!

0voto

nachito777sk comentado

Ahora recordé que en la última web que hice tuve que tocar algo del mysqli, por que el anterior que tenía puesto, sin la "i" me daba un error por estar desfasado..... algo toqué y quedó mal.
Al final ya me funciona bien. Me lo miraré bien para entenderlo y que no me vuelva a pasar.
Gracias, es una suerte que haya gente con ganas de ayudar.
Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta