Ir para conteúdo

POWERED BY:

Arquivado

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

rafinhaphp

mysql_num_rows() em parent class

Recommended Posts

salve galera... seguinte tenho o seguinte metodo:

 

public function logar() {
		$qr = parent::getWhere('usuario',
							   "usuario = '$this->usuario'");
		if(mysql_num_rows($qr) == 0){
		  echo 'invalida';
		}
		else{
		   echo 'logado';
		}
	}

mas ta dando o erro:

" Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\orientacao\loginsenha\validacao.php on line 36 "

 

a linha 36 é "if(mysql_num_rows($qr) == 0){"

 

orque isso acontece? estou herdando uma class que faz a conexão, select, etc etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

retornou bool(false) ....

 

oq tenho que arrumar?

 

porque se eu uso um mysql_query("SELECT usuario....

 

ai funciona, mas quando eu uso o metodo da esse erro.. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites


public function getWhere($linhas,$where) {

$result = mysql_query("SELECT $linhas FROM $this->table WHERE $where");

return $result;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho que se eu colocar:

$qr = mysql_query("SELECT usuario FROM login WHERE usuario = 'rafael'");

ai funciona... sera que tem alguma coiza gaver com o ::parent ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

encontrei o Problema...

 

 

public function getWhere($linhas,$where) {

$result = mysql_query("SELECT $linhas FROM $this->table WHERE $where");

return $result;

}

 

para funcionar eu tenho que mudar o metodo para:

"SELECT $linhas FROM login WHERE $where"

ele ñ deve ta conseguindo encontrar o parametro $table... porque se eu coloco o nome da tabela direto funciona... mas porq?

 

 

eu declarei assim na minha classeMysqlConnect:

private $servido;
	private $user;
	private $pass;
	private $base;
	private $table;
	
	public function __construct($servidor,$user,$pass,$base,$table){
		$this->servidor 	= $servidor;
		$this->user 		= $user;
		$this->pass 		= $pass;
		$this->base			= $base;
		$this->table		= $table;
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

retornou false ainda.... mas manu

 

eu acho que a segunda classe não esta conseguindo herdar o valor dos atributos da primeira... esse deve ser o motivo

 

porque quando eu troco "$this->table" pelo nome da tabela mesmo da certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentei usar até publica mas ñ resolveu o problema... porq sera em?? quer q poste as 2 classes completas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

class MysqlConnect{
	protected $servido;
	protected $user;
	protected $pass;
	protected $base;
	protected $table;
	
	public function __construct($servidor,$user,$pass,$base,$table){
		$this->servidor 	= $servidor;
		$this->user 		= $user;
		$this->pass 		= $pass;
		$this->base			= $base;
		$this->table		= $table;
	}
	
	public function connect(){
		mysql_connect($this->servidor,$this->user,$this->pass) or die('Erro na CONEXAO');
	}
	public function select(){
		mysql_select_db($this->base) or die('Erro no SELECT'. mysql_error());
	}
	
	public function getWhere($linhas,$where,$tabelas) {
		$result = mysql_query("SELECT $linhas FROM $this->table WHERE $where");
		return $result;
	}
}

 

 

 

class Login extends MysqlConnect{
	private $usuario;
	private $senha;
	
	public function __construct($user,$pass) {
		$this->usuario 	= $user;
		$this->senha	= $pass;
	}
	public function logar() {
		
		$qr = parent::getWhere('usuario',"usuario = '$this->usuario'");
		echo var_dump($qr);
	}
}



$base = new MysqlConnect('localhost','root','','estudo','login') or die(mysql_error()	);
$base->connect();
$base->select();

$login = new Login('rafael','123456');
$login->logar();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, existe uma confusão na forma de trabalhar com herança. A classe Login não deve estender a classe MySQLConnect, pois o conceito de herança diz que a classe que herda (filha) deve especializar a classe que herdou (pai). Não é o que ocorre no seu caso, ja que a classe Login só utiliza a classe MySQLConnect.

Sugiro que estude um pouco sobre os padrões de projeto (design pattern) Registry e Singleton. Aqui tem um tópico muito interessante onde o João Batista fala sobre isto.

Além disto, utilize MySQLi ou PDO já que quer trabalhar com POO.

http://br.php.net/pdo

http://br.php.net/mysqli

 

Carlos Eduardo

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.