Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tatsui

CRUD OO - mysql_fetch_array() expects parameter 1 to be resource, null

Recommended Posts

E ai galera.
Então estou com esse problema ai e não consigo resolver, peguei o código de um amigo e fui modificando. Sou iniciantes em OO e não sei debugar direito.
O erro que eu recebo é esse:

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/chottoway/www/class/DataBase.class.php on line 126

E meu código é esse (um pouco grande):

<?php
abstract class DataBase{

public $host = "xxx";
public $user = "xxx";
public $pass = "xxx";
public $db = "xxx";
public $connection = NULL;
public $afectedRows = NULL;
public $selectData = NULL;
public $selectMore = NULL;


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


public function __destruct(){
    if( $this->connection != NULL ){
        mysql_close( $this->connection );
    }
}


public function connect(){
    $this->connection = mysql_connect( $this->host, $this->user, $this->pass, TRUE ) or die( mysql_error() );
    mysql_select_db( $this->db ) or die( mysql_error() );
}


public function insert( $object ){
    $sql = "INSERT INTO " . $object->table . " (";
    for( $i = 0; $i < count( $object->fieldsValues ); $i++ ){
        $sql.= key( $object->fieldsValues );
        if( $i < count( $object->fieldsValues ) - 1 ){
            $sql.= ", ";
        }else{
            $sql.= ") ";
        }
        next( $object->fieldsValues );
    }
    reset( $object->fieldsValues );
    $sql.= "VALUES (";

    for( $i = 0; $i < count( $object->fieldsValues ); $i++ ){
        $sql.= is_numeric( $object->fieldsValues[key( $object->fieldsValues )] ) ? $object->fieldsValues[key( $object->fieldsValues )] : "'" . $object->fieldsValues[key( $object->fieldsValues )] . "'";

        if( $i < count( $object->fieldsValues ) - 1 ){
            $sql.= ", ";
        }else{
            $sql.= ") ";
        }
    next( $object->fieldsValues );
    }
    return $this->executeSQL( $sql );
}


public function update( $object ){
    $sql = "UPDATE " . $object->table . " SET ";

    for( $i = 0; $i < count( $object->fieldsValues ); $i++ ){
        $sql.= key( $object->fieldsValues ) . " = ";


        $sql.= is_numeric( $object->fieldsValues[key( $object->fieldsValues )] ) ? $object->fieldsValues[key( $object->fieldsValues )] : "'" . $object->fieldsValues[key( $object->fieldsValues )] . "'";

        if( $i < count( $object->fieldsValues ) - 1 ){
            $sql.= ", ";
        }else{
            $sql.= " ";
        }

        next( $object->fieldsValues );
    }

    $sql.= "WHERE " . $object->fieldPk . " = ";
    $sql.= is_numeric( $object->valuePk ) ? $object->valuePk : "'" . $object->valuePk . "'";

    return $sql;
    //return $this->executeSQL( $sql );
    }


public function delete( $object ){
    $sql = "DELETE * FROM " . $object->table;
    $sql .= " WHERE " . $object->fieldPk . " = ";
    $sql.= is_numeric( $object->valuePk ) ? $object->valuePk : "'" . $object->valuePk . "'";
    return $sql;
    //return $this->executeSQL( $sql );
}


public function selectAll( $object ){
    $sql = "SELECT * FROM " . $object->table;


    if( $this->selectMore != NULL ){
        $sql .= " " . $object->selectMore;
    }


    //return $sql;
    return $this->executeSQL( $sql );
}


public function executeSQL( $sql = NULL ){
    if( $sql != NULL ){
        $query = mysql_query( $sql ) or die( mysql_error() );
        $this->afectedRows = mysql_affected_rows( $this->connection );


        if( substr( trim( strtoupper( $sql ) ), 0 , 6) == "select" ){
            $this->selectData = $query;
            return $query;
        }else{
            //return $this->afectedRows;
        }
    }
}


public function dataReturn( $type = NULL ){
    switch ( strtolower( $type ) ) {
        case 'array':
            mysql_fetch_array( $this->selectData );
            break;
        case 'assoc':
            mysql_fetch_assoc( $this->selectData );
            break;
        case 'object':
            mysql_fetch_object( $this->selectData );
            break;
        default:
            mysql_fetch_object( $this->selectData );
            break;
    }
}
}
?>

Pelo q eu vejo o problema é na linha do método executeSQL que esta atribuindo valor a propriedade:


$this->selectData = $query;

Parece que ela não recebe nada.

Eu ja procurei o erro milhares de vezes mas não acho.

Espero que vocês possam me ajudar.

 

Agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, isso seria bom, mas em todo caso eu preciso entender o porque do erro. Eu comecei e vou terminar.

Ainda estou aqui tentando achar o erro.

 

Conto sua ajuda e de outros.

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O primeiro ponto é mudar de mysql_* para PDO.

 

Eu diria que o primeiro ponto é ele tirar a senha do banco de dados dele do post no fórum :skull:

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz kkkkkkkkkkkkk

é verdade, obrigado

 

 

Como está chamando a função executeSQL() ?

 

 

 

Estou fazendo assim:

 

<?php
require_once "Users.class.php";
$user = new Users();
$user->selectALL( $user );
while( $data = $user->dataReturn('array') ){
    echo $data['nome'] . "<br>";
}
?>

 

No caso a classe Users tem o seguinte:

require_once( "Base.class.php" );

class Users extends Base{
public function __construct( $fields = array() ){
    parent::__construct();
    $this->table = "tatsui_users";
    if( sizeof( $fields ) <= 0 ){
        $this->fieldsValues = array(
            "login" => "teste",
            "nome" => "Teste"
        );
    }else{
        $this->fieldsValues = $fields;
    }
    $this->fieldPk = "id";
}
}

 

A classe Base só tem uns metodos pra inserir, excluir e editar campos do array.

 

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

EDITADO 14:20

 

Galera descobri o erro:

 

 

Está no IF do médoto executeSQL();

A condição esta errada, pois eu to usando o strtoupper() e escrevendo em minusculo, por isso estava caindo no false.

Corrigi trocando pra strtolower();

mas agora não mostra nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi galera.

A principio o erro na linha de condição do método executeSQL() que tava com a função errada.

Depois eu esqueci de colocar o return nos cases do switch do médoto dataReturn().

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.