Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia amigos,
E o seguinte a classe listada abaixo foi criada a pedido do meu professor de PHP. Ela funciona e ainda estou usando a bichinha para muitas coisas por ai, porém ele não gostou e me chamou a atenção.
De acordo com ele “Funcionar não é igual a funcionar”
Não entendi o que ele falou, eu uso a classe chamado meus próprios sql e não é possível tomar um SQL injection (eu acho)
O que devo melhorar? O que devo acrescentar? Validar algum dado ou coisa assim? Se alguém ai com + tempo de experiência puder dizer o que falta na classe que é importante o suficiente para o professor chamar minha atenção eu agradeceria.
<?php
Class Mysql {
private $host = 'localhost';
private $user = 'root';
private $pass = '';
private $banco = 'teste';
private $sql;
public function SetSQL($sql) {
$this->sql = $sql;
}
private function Conecta() {
$conecta = mysql_connect($this->host, $this->user, $this->pass) or die();
if (!$conecta) {
echo 'Ocorreu um Erro na conexão MySQL:';
die();
} elseif (!mysql_select_db($this->banco, $conecta)) {
echo 'Ocorreu um Erro em selecionar o Banco:';
die();
}
return $conecta;
}
public function Query() {
$this->Conecta();
$query = mysql_query($this->sql) or die();
return $query;
}
}
$obj = new Mysql;
$obj->SetSQL('SELECT * FROM email');
$troll = $obj->Query();
echo mysql_num_rows($troll);Realmente amigo seria fácil pegar uma classe pronta por ai porém meu objetivo é aprender por isso faço tudo que posso na mão. vou mudar de acordo com suas dicas e posto aqui :)
>
Realmente amigo seria fácil pegar uma classe pronta por ai porém meu objetivo é aprender por isso faço tudo que posso na mão. vou mudar de acordo com suas dicas e posto aqui :)
mas nao disse que é pra usar nenhuma classe pronta, apenas citei como material didatico
você pode dar uma olhada nas classes existentes por ai, algumas são comentadas, outras não
remova os comentarios logo de inicio e tente estudar o que cada linha faz
no mais, acho que uma classe de conn - se não for uma lib - deve se adaptar ao sistema em si
se o professor pedir pra você cirar uma class, fica meio vago
pra mim a classe acompanha as necessidades do projeto
Cara... tente ver uma coisa muito lgl que se chama PDO.. Ele por natureza ja evita mysql injection
Olá, renato!
Em primeiro lugar, a sua classe (se for a primeira) está muito bacana, parabéns.
Mas vamos analisar dois pontos importantes:
E, em sumo, era isso. Espero - mesmo em parciais - ter te ajudado e qualquer dúvida volte aqui! :joia:
Sim Guilherme estou pensando em usar o MySQLi, acho que ele deve ser o bicho. Como você disse essa é minha 1° classe com algo útil, o resto era para entender os conceitos de orientação objeto. Class Pessoas{ bla bla bla}
claro que quero mesmo entender o meu professor, sei que com estudo poderei implementar é MUITO isso ai e tratar erros, validar querys, e otimizar o processo de uso da classe. até la tenho que ler muito rsrsrs
Pois é, com estudo se pode tudo meu chapa.
Mas se eu puder te dar um conselho, digo que PDO é melhor que MySQLi, viu? Ele genericamente previne alguma parte do SQL Injection e poupa muitas linhas de código.
Dê uma estudada nos dois e veja qual melhor se encaixa na sua classe.
Vai estudando que você chega longe. ;)
Abração!
Seguindo a dica do nosso amigo Guilherme, corri atrás do PDO e encontrei essa classe mostrada abaixo. o problema é, eu entendi que ela é mais segura ao receber dados de um formulário devido a possibilidade de preparar o envio do sql, mas como eu utilizo essa classe para listar algum valor? Quando eu vou fazer a chamado para listar algo não é necessário preparar correto?
<?php
class Connection extends PDO {
private $dsn = 'mysql:dbname=teste;host=localhost';
private $user = 'root';
private $password = '';
public $handle = null;
function __construct( ) {
try {
if ( $this->handle == null ) {
$dbh = parent::__construct( $this->dsn , $this->user , $this->password );
$this->handle = $dbh;
return $this->handle;
}
}
catch ( PDOException $e ) {
echo 'Connection failed: ' . $e->getMessage( );
return false;
}
}
function __destruct( ) {
$this->handle = NULL;
}
}
$db = new Connection;
$sql = $db->prepare("INSERT INTO compromisso( com_id, com_dia, com_mes, com_ano, com_hora, com_compromisso) VALUES (?,?,?,?,?,?)");
$valores = array ('', '7', '2', '2010', '13:45', 'Novo teste PDO com classe de conexão');
$sql->execute($valores);
>
De acordo com ele “Funcionar não é igual a funcionar”
nem tudo que funciona esta certo... pular do 5º andar nao quer dizer que você possa voar :)
so pq sua classe não contem uma mensagem de erro, nao quer dizer que esteja correta, ou que seja a melhor forma
>
não é possível tomar um SQL injection (eu acho)
nao é a classe de conexão que deve tratar injections
>
isso aos meus olhos esta errado
dependendo da aplicação, se você nao obtiver uma conexão com a database, você pode ter a opção de recorrer à outra database, mas da forma que fez, você MATA o sistema
tem outras classes de conexão mais completas
[]s