Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo_crd

[Resolvido] função mysql_real_escape_string()

Recommended Posts

Boa noite pessoal,

 

Alguém pode me explicar para quê serve a função mysql_real_escape_string()? Pesquisei bastante sobre ela, fiz alguns testes mas não consegui entender.

 

Acontece que peguei um trecho de código na internet que usa essa função e gostaria de entendê-lo melhor, segue o trecho de código:

 

$query = mysql_query('SELECT * FROM cadastro WHERE Id < "'.mysql_real_escape_string($_GET['lastCad']).'" LIMIT 5');

 

Esse é o retorno dessa consulta:

Resource id #5

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro de tudo: http://bit.ly/11QbYx6

 

Segundo de tudo:

Use of this extension is discouraged. Instead, the MySQLi or PDO_MySQL extension should be used.

Parafraseando, o uso da função é desencorajada, uma vez que existem alternativas melhores.

 

Mas nada impede da curiosidade de se saber o que ela faz.

Escapes special characters in a string for use in an SQL statement

"Escapa" caracteres especiais em uma string para uso em um statement SQL. Em uma query, bem dizendo.

 

A função foi desenvolvida para evitar conflitos com caracteres especiais e SQL Injection. Os conflitos são muito comuns quando não se possui familiaridade com string (abre aspas / fecha aspas).

 

Se eu possuir a seguinte string:

asda'sda'dsad"sadasd'

E utilizar a função, a saída dela será:

asda\'sda\'dsad\"sadasd\'

Com todos os caracteres especiais escapados.

 

Detalhe adicional. Essa função é totalmente dependente de uma conexão. Se não houver conexão ativa, a função não irá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela força Gabriel.

 

Acontece que eu pesquisei no manual do PHP sobre a função e não estava entendendo mesmo.

 

Consegui entendê-la melhor quando você citou o SQL Injection, dai eu pesquisei e realizei uns testes da maneira certa.

 

Obrigado de verdade.

 

Uma outra dúvida que tenho que não consigo desatolar é como pegar um texto de um input e passá-lo por uma função que pega os caracteres especiais do HTML e os transforma em código.

 

Por exemplo, pegar:

 

Áudio e vídeo ao máximo!

 

E devolver:

 

Áudio e Vídeo ao máximo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderá utilizar htmlentities para isso.

 

Você vai necessitar do segundo parâmetro, ENT_QUOTES, definido.

echo htmlentities("A 'quote' is <b>bold</b>", ENT_QUOTES);

 

Não poderei demonstrar a saída aqui, pois os caracteres serão convertidos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu de novo Gabriel!

 

Não consegui utilizar a função. Estou usando ela nesse código para tratar um título:

 

$titulo = $_POST['Titulo'];
$titulo = mysql_real_escape_string($titulo);
$titulo = ucfirst($titulo);
$titulo = htmlentities($titulo, ENT_QUOTES);

 

Em uma parte mais à frente eu verifico se $titulo está vazia, e está acusando que sim. Se eu tiro a quarta linha ou se no título eu não coloco nenhum acento o código funciona corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Detalhe adicional. Essa função é totalmente dependente de uma conexão. Se não houver conexão ativa, a função não irá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não entendeu Gabriel, o que não funcionava era a função htmlentities().

 

Mas era um erro bobo, eu esqueci de informar o charset da página como UTF-8.

 

Após declarar o charset eu adicionei outro paramêtro à função e ficou assim:

 

$titulo = htmlentities($titulo, ENT_QUOTES, 'UTF-8');

 

Valeu a força amigo.

 

Moderação, pode fechar o tópico, valeu!

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.