Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Exemplo de uma classe de conexao usando MySQLI e arquivo de configuração separado e debugger
config.php:
<?php
define("SERVIDOR", "localhost");
define("USUARIO", "usuario");
define("SENHA", "senha");
define("BANCO", "banco");
?>
index.php:
<?php
include "config.php";
include "conexao.class.php";
$comando = new DBMySQLi();
$re = $comando->Executar("select * from tabela");
while($obj = $re->fetch_object()) {
echo $obj->campo;
}
?>
conexao.class.php:
<?php
Class DBMySQLi extends Mysqli
{
public function __construct()
{
try {
@$this->connect( SERVIDOR, USUARIO, SENHA, BANCO );
if(mysqli_connect_errno() != 0) {
throw new Exception(mysqli_connect_errno());
}
} catch(Exception $erro) {
$mensagem = $erro->getMessage();
$codigo = $erro->getCode();
$arquivo = $erro->getFile();
$trace = $erro->getTraceAsString();
$dir = getcwd()."\\logs\\";
if(!file_exists($dir)) {
mkdir($dir);
}
error_log(date("Y-m-d H:i:s")."|$mensagem|$codigo|$arquivo|$trace\r\n\r\n", 3, $dir."debugger.log");
exit;
}
}
public function __destruct() $this->close();
}
}
public function Executar($SQL) $resultado = $this->query($SQL);
if(preg_match("#(select)#is", $SQL)) {
return $resultado->fetch_object();
} else {
return $this->affected_rows;
}
}
}
?>também tive o mesmo problema, mas resolveu mudando essa linha na classe:
return $resultado->fetch_object();
para
return $resultado;
Pois na página já fazia o fetch_object();
acho que é isso.
é isso mesmo no lugar de retornar o
return $resultado->fetch_object();
você pode retornar o objeto completo assim você faz o que quiser depois
return $resultado;
Qual a vantagem de utiliza este metodo de conexão?Abrçs e parabéns
Uma duvida!
eu preciso de uma classe chamada Mysqli para essa poder funcionar?
pois pelo que vi essa classe tem um extends Mysqli.
nao, essa classe é interna do PHP5
Excelente tópico, parabénsmuito esclarecedor, principalmente pra pessoas como eu, que conhece pouco a linguagem(PHP)mas com a lógica de orientação à objetos.Continue assim
gostei da class, agora segue uma dúvida;fui fazer um teste colocando um comando de sql errado, exemploselect * from medico;sendo que no banco não tenho a tabela médio, ele retorna um erro muito generico, tem como contrar o erro que retornou? derepente uma função igual a mysql_error();?retornou esse erro:Fatal error: Call to a member function fetch_object() on a non-object in C:\Arquivos de programas\VertrigoServ\www\novo_sms\include\class\teste.php on line 9
Nessecaso, basta verificar se a propriedade errno da classe mysqli contém o valor zero. Se for zero, não houve erro, e o resultado da consulta pode serretornado. Se for diferente de zero, houve erro. Por exemplo:
public function Executar($SQL)
{
$resultado = $this->query($SQL);
if ($this->errno != 0)
{
//houve erro. É posssível tratar esse erro com Exceções. $this->error contém a mensagem de erro e $this->errno, o número do erro
return false;
}
if(preg_match("#(select)#is", $SQL)) {
return $resultado->fetch_object();
} else {
return $this->affected_rows;
}
}
A função is_object() também é útil nessecaso, para verificar se uma variável é instância de um objeto.
Abraços,
Beraldo
Gente, eu sei que eu dei uma ressuscitada neste post, mas preciso de uma ajuda.
Estou começando a usar classes, etc.. e encontrei uma dificuldade na hora de usar esta pra fazer a consulta SQL.
Se eu coloco LEFT JOIN no SELECT, na hora de chamar a função Executar... ele dá erro : (Fatal error: Call to a member function fetch_object() on a non-object...)
É assim mesmo ou estou errando algo?
CODE
$re = $this->Executar("SELECT *
FROM sisnot_noticias
WHERE categoria IN ($sec) AS not
LEFT JOIN sisnot_categorias AS cat
ON (not.categoria = cat.nome)
ORDER BY data DESC $pag ");
Obrigada pela ajuda!
o problema é na SQL, não na classe. Left Join deve vir antes de Where.
Você pode usar $MySQLi->error para ver qual é o erro retornado pelo MySQL.
OBS: $MySQLi deve ser trocado pela instância da classe. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
>
o problema é na SQL, não na classe. Left Join deve vir antes de Where.
Você pode usar $MySQLi->error para ver qual é o erro retornado pelo MySQL.
OBS: $MySQLi deve ser trocado pela instância da classe. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Olá!
Obrigadão pela força! Realmente era a SQL...colocando pra imprimir o erro foi fácil descobrir o problema (além do WHERE no lugar errado...hehe) que era o nome not que eu dei pra uma das tabelas...ele entendia como not=não...
Que coisa, né!
Mais uma vez, sou muito grata pelo apoio!
É realmente muito importante pra quem está começando... :D
Fatal error: Class 'Mysqli' not found in C:\Inetpub\wwwroot\teste.php on line 7
Por acaso, essa classe pode não ter no windows ou ter q habilitar em alguma configuração?
to usando o PHP Version 5.2.9-2
tem que habilitar a extensão mysqli, no php.ini.
Alguem teria a função de inserir desta classe?
Aguardo
basta usar o comando INSERT normalmente.
>
basta usar o comando INSERT normalmente.
Sempre programei php sem orientação a objeto, ate usei já funçoes prontas em alguns sites porem não estou conseguindo e tenho certeza que estou cometendo algum erro basico.
Se puderes me ajudar veja o codigo abaixo.
<?php
include "classMysql.php";
$comando = new DBMySQLi();
$re = $comando->Executar("INSERT * FROM teste (nome) VALUE ('Inserindo');");
?>Você está errando a sintaxe da SQL. Estude SQL
INSERT INTO tabela (campos) VALUES (valores);
MUITOOO HILARIOOOOOOO
Bah cara este meu erro é completamente HILARIO kkkk.
Bah mas me tira 1 duvida ai como faço o tratamento caso de algum erro na inserção.
A classe estende todos os métodos e propriedades da classe mysqli, logo, você pode usar a propriedade error ou errno:
$obejto->error
$objeto->errno
Fabyo, parabéns pelos seus scripts, sempre simples e fácil de usar.
Neste eu tive um problema e gostaria de pedir a sua ajuda pois não consegui entender oq ocorreu.
Ao executar o script apareceu a seguinte mensagem de erro:
A linha 9 é linha do while.
você sabe oq pode estar ocorrendo???
Obrigado