Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou tendo muita dificuldade para descobrir porque não esta passando a query
sendo que a mesma string eu coloco no PHPmyAdmin e executa a consulta correto.
Vou postar a classe
<?php
class mySqlConn{
protected $host, $user, $pass, $dba, $conn, $sql, $qr, $data, $status, $total_fields, $error;
//metodo que inicializa automaticamente as variaveis de conexao
public function __construct(){
$this->host = "localhost";
$this->user = "root";
$this->pass = "";
$this->dba = "dbcurso";
self::connect();
}
//metodo utilizado para efetuar a conexao com o banco de dados
protected function connect(){
$this->conn = @mysql_connect($this->host, $this->user, $this->pass)
or die ("erro ao acessar o baco de dados<br>".mysql_error());
$this->dba = @mysql_select_db($this->dba)
or die("Erro ao acessar banco de dados<br>".mysql_error());
}
//metodo utilizado para executar comandos em SQL
protected function execSQL($sql){
$this->qr = @mysql_query($sql, $this->conn) or die("Erro ao executar a Consulta: $sql<br>");
return $this->qr;
}
//metodo que lista dados
protected function listQR($qr){
$this->data = @mysql_fetch_assoc($qr);
return $this->data;
}
protected function countData($qr){
$this->total_fields = mysql_num_rows($qr);
return $this->total_fields;
}
}
?>
Depois eu Pego na classe descendente.
$sql = "SELECT * FROM tbbanners where tamanho_banner='468x60' ORDER BY RAND() LIMIT 1";
$qr = self::execSQL($sql);
$data = self::listQR($qr);
Me retorna o erro:
Erro ao executar a Consulta: SELECT * FROM tbbanners where tamanho_banner='468x60' ORDER BY RAND() LIMIT 1
Como faço para descobrir o que esta acontecendo?
Faça o seguinte. Comece tirando as @, que são supressores de erros. Como a gente quer que o erro aparece pra poder corrigir, então tire...
Troque
$this->qr = @mysql_query($sql, $this->conn) or die("Erro ao executar a Consulta: $sql<br>");
Por isto
$this->qr = mysql_query($sql, $this->conn) or die('Erro ao executar a Consulta: '. $sql.'<br>Erro do Mysql'.mysql_error());
Vai imprimir a consulta e o erro. Veja se descobre o que acontece.
Outra coisa. Se está utilizando OO, porque não utiliza Mysqli?
Carlos Eduardo
>
Outra coisa. Se está utilizando OO, porque não utiliza Mysqli?
Outra coisa. Se está utilizando OO, porque não trabalha com exceções em vez de die()?
http://br2.php.net/manual/en/language.exceptions.php
2. Quanto ao problema de fato, as classes derivadas:
>
$sql = "SELECT * FROM tbbanners where tamanho_banner='468x60' ORDER BY RAND() LIMIT 1";
$qr = self::execSQL($sql);
$data = self::listQR($qr);
Você só deve utilizar self se for um método estático ou uma constante de classe.
No seu caso, quando você utiliza self, você está no contexto da classe, quando sua classe mySqlConn chegar nessa linha aqui:
>
@mysql_query($sql, $this->conn)
Veja que é utilizada a propriedade **$conn** definida no contexto do **objeto**, a chamada utilizando **self** vai causar uma falha porque nesse ponto, **$this->conn** é ***null***
Suas classes derivadas deverão fazer assim:
class Derivada extends mySqlConn {
public function umMetodo(){
$sql = "SELECT * FROM tbbanners where tamanho_banner='468x60' ORDER BY RAND() LIMIT 1";
$qr = $this->execSQL( $sql );
$data = $this->listQR($qr);
//...
}
}
muitas pessoas acham q classes eh facil de usar, principalmente pq nao sabem os padroes de projeto, fazer d qq manaira tb funciona...no caso, acredito q nao seja um sistema em OO, pois ele teria usado mysqli..
Realmente, estou implementando Padroes de Projeto na minha programação, essa é a
razão de eu não estar entendendo o que esta acontecendo.
eu retirei o die() e o @ entes de executar a query e ainda me acusa este erro.
"SELECT * FROM tbbanners where tamanho_banner='468x60' ORDER BY RAND() LIMIT 1
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\curso\classe\mySqlConn.php on line 25"
"Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\curso\classe\mySqlConn.php on line 31"
entao q padrao você usou ai...? pq no OO procuramos usar as classes ja nativas do proprio php, como o amigo citou la emcima, usar excecoes...
>
entao q padrao você usou ai...? pq no OO procuramos usar as classes ja nativas do proprio php, como o amigo citou la emcima, usar excecoes...
Voce não entendeu mesmo, estou estudando orientaçao a objetos com PHP.
Se tivesse usado de maneira procedural teria terminado a muito mas muito tempo atras. Quero usar padroes de
projeto apenas para ficar atualizado com novas tendencias mas não agora nesse código, nem seria obrigatorio
fazer isso. Apenas quero que funcione.
Certo. Como está o seu código neste momento?
Carlos Eduardo
>
Você só deve utilizar self se for um método estático ou uma constante de classe.
...
Veja que é utilizada a propriedade $conn definida no contexto do objeto, a chamada utilizando self vai causar uma falha porque nesse ponto, $this->conn é null
>
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\curso\classe\mySqlConn.php on line 25"
Você realmente ignorou o que eu disse ???
Executei seu script aqui e funcionou.
Tire o die para visualizar o erro e poste ele aqui para podermos ajudar.