Tatsui 0 Denunciar post Postado Fevereiro 18, 2014 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
Enrico Pereira 299 Denunciar post Postado Fevereiro 18, 2014 O primeiro ponto é mudar de mysql_* para PDO. Compartilhar este post Link para o post Compartilhar em outros sites
Tatsui 0 Denunciar post Postado Fevereiro 18, 2014 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
Jonaslhp 39 Denunciar post Postado Fevereiro 18, 2014 Como está chamando a função executeSQL() ? Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Fevereiro 18, 2014 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
Tatsui 0 Denunciar post Postado Fevereiro 18, 2014 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
Tatsui 0 Denunciar post Postado Fevereiro 18, 2014 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