• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Andrer757

Erro com classes

5 mensagens neste tópico

Boas pessoal.

Estou aqui com um pequeno problema para por uma classe que criei a funcionar.

a classe (MySQLi.class.php):

/** Esta classe serve para gerir as ligações ás Bases de Dados MySQL.
* Esta classe utiliza as funçoes mysqli.
* @copyright I3Portal.net 2008
* @package I3
* @subpackage Admin
* @author André Rosa
* @access Private
*/
class MySQLi { //--> linha 10
  
  /** Atributos da class MySQLi.
  * @var $lig Conecção
  */
  private $lig = NULL;
  
  /** Métudo para ligar á base de dados.
  * @param String $bdname Nome da base de dados
  * @param String $user Utilizador do Mysql
  * @param String $password Password de acesso á base de dados
  * @param String $server Servidor da base de dados
  * @return Connecção á base de dados
  */
  public function ligarBD(string $bdname, string $user, string $password, string $server) {
    $this->lig = @mysqli_connect($server, $user, $password);
    if($this->lig<0) {
      return -1;
    }
    if(@mysqli_select_db($this->lig, $bdname)==false) {
      return -1;
    }
  }

  /** Métudo que executa um determinado comando SQL.
  * @param String $sql_command Comando SQL
  * @return $resultado Execução do comando
  * @requires A ligaçao esteja activa
  */
  public function executarSQL(string $sqlCommand) {
    $resultado = @mysqli_query($this->lig, $sqlCommand) or die(mysqli_error($this->lig));
    return $resultado;
  }

  /** Métudo que devolve os resultados de uma execução de um código SQL.
  * @param $executado variavel que detem o sql executado
  * @return $resultado Resultads obtidos
  * @requires A ligaçao esteja activa
  */
  public function resultadosObtidos($executado) {
    $resultado = @mysql_fetch_assoc($this->lig, $executado);
    return $resultado;
  }

  /** Métudo que executa um determinado comando SQL e retorna as linhas da tabela dessa tabela.
  * @param String $sql_command Comando SQL
  * @return Int $rows Total de linhas de uma tabela
  * @requires A ligaçao esteja activa
  */
  public function totalLinhas(string $sqlCommand) {
$rows = @mysqli_num_rows($this->lig, $sqlCommand);
    return $rows;
  }

  /** Métudo que transforma um objecto de forma a não causar problemas no MySQL.
  * @param Object $theValue O objecto
  * @param String $theType Tipo do Objecto
  * @param String $theDefinedValue Valor definido
  * @param String $theNotDefinedValue Valor não definido
  * @return Connecção á base de dados
  * @requires A ligaçao esteja activa
  */  
  public function GetSQLValueString(object $theValue, string $theType, $theDefinedValue = "", $theNotDefinedValue = "") {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
$theValue = function_exists("mysqli_real_escape_string") ? mysqli_real_escape_string($this->lig, $theValue) : mysqli_escape_string($this->lig, $theValue);
switch ($theType) {
	case "text":
		$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
		break;    
	case "long":
	case "int":
		$theValue = ($theValue != "") ? intval($theValue) : "NULL";
		break;
	case "double":
		$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
		break;
	case "date":
		$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
		break;
	case "defined":
		$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
		break;
}
return $theValue;
  }

  /** Métudo que fecha a Base de Dados.
  * @requires A ligaçao esteja activa
  */
  public function fecharBD() {
    mysqli_close($this->lig);
  }
}

e a página onde a estou a testar:

require_once("MySQLi.class.php");
$db = new MySQLi();
$db->ligarBD("aratransito", "root", "123456", "localhost");
$sql = "SELECT regiao, `desc` FROM marquee ORDER BY regiao ASC";
$executar = $db->executarSQL($sql);
$row = $db->resultadosObtidos($executar);
$totalDeLinhas = $db->totalLinhas($sql);
$db->fecharBD();
echo $row['regiao'];

o erro que me dá é:

Fatal error: Cannot redeclare class MySQLi in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Projectos\Actuais\TeleTrafego\MySQLi.class.php on line 10

Já tive a procurar aqui no fórum outros posts que pudessem ajudar mas não encontrei nada. Alguém me poderia ajudar? Thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a definir 2 vezes a classe. Vê se não estás a incluir 2 vezes o ficheiro ou se não a tens declarada noutro lado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois mas eu so tenho esse dois ficheiros (MySQLi.class.php e teste.php) e so chamo a classe no ficheiro de testes, em mais lado nenhum por isso e que não percebo porque e que da erro mas vou ver se se passa tentando por so estes dois ficheiros no apache sem mais nenhum e ver se da caso contrario não percebo mesmo

thanks na mesma

---------- acrescentado ---------------

so com os dois ficheiros continua a dar o erro abra so a classe ou so a pagina de teste  :cheesygrin:

ja esta resolvido o problema e que o php como tem a classe mysqli e como a minha classe tambem tinha o mesmo nome (apesar de eu ter escrito MySQLi) entrava em conflito, agora mudei o nome da classe para BD e já funciona.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem visto, nunca mais me lembrei que no PHP5 é uma classe...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois lol.

É daqueles erros que se perde montes de tempo e no fundo são básicos.

Offtopic:

É Método e não Métudo.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora