Pergunta

Esta é a minha primeira pergunta aqui e espero que seja o suficiente simples para obter uma resposta rápida!

Basicamente, eu tenho o seguinte código:

$variable = curPageURL();
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable' ;

Se eu ecoar o $ variável, ele imprime o URL da página atual (que é um javascript na minha página)

Em última análise, o que eu quero, é ser capaz de fazer uma pesquisa para o qual a busca prazo é o URL da página atual, com wildcards antes e depois. Eu não tenho certeza se isso é possível em tudo, ou se eu simplesmente tem um erro de sintaxe, porque eu recebo nenhum erro, simplesmente nenhum resultado!

Eu tentei:

    $query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '"echo $variable" ' ;

Mas, novamente, eu sou provavelmente faltando ou usando um extraviado '. "; Etc

Por favor me diga o que estou fazendo errado!

Foi útil?

Solução

Em última análise, o que eu quero, é ser capaz de fazer uma pesquisa para o qual a busca prazo é o URL da página atual, com wildcards antes e depois.

O personagem SQL curinga é um sinal de porcentagem. Portanto:

$variable = curPageURL();
$variable = mysql_real_escape_string($variable);
$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '%{$variable}%'";

Nota: Eu adicionei em um pouco mais de código. mysql_real_escape_string() o protegerá de usuários colocando deliberadamente ou acidentalmente personagens que irão quebrar sua instrução SQL. Você é melhor fora de usar consultas parametrizadas, mas isso é um tópico mais envolvido do que essa correção simples.

Também nota: Eu fixo a cadeia citando também. Você só pode usar uma variável em uma corda diretamente se essa seqüência é dupla citado, e que estava faltando uma citação no final da $query.

edição 17 de janeiro de 2015:. Apenas tem um upvote, então com isso em mente, por favor não use as funções mysql_* mais

Outras dicas

Use:

$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '{$variable}'" ;

Para ter uma idéia de por que para evitar ataques de injeção SQL, como o acima seria vulnerável a, submeto "Exploits de uma mãe":

text alt

Por favor, não faça isso, é vulnerável a (esta é uma lista de 138 StackOverflow perguntas que você deve ler , absorver e compreender antes de retornar à sua aplicação) . Use parametrizada consultas ou procedimentos armazenados.

Use aspas se você precisa substituir os valores das variáveis:

## this code is open for SQL injection attacks
$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable'";

Ou concatenação de string manualmente:

## this code is open for SQL injection attacks
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE "' . $variable . '"';

Seu código é vulnerável a ataques de injeção SQL. dados fornecidos pelo usuário nunca deve ser colocado diretamente em uma seqüência de consulta SQL. Em vez disso, ele deve primeiro ser higienizados com uma função como mysql_real_escape_string().

Quanto ao porquê de você não está sendo notificado do erro de sintaxe:. É bastante provável que o seu relatório de erros configurações não estão configurados corretamente

Open php.ini e certifique-se o seguinte está definido:

display_errors = On

E:

error_reporting = E_ALL
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top