Para que usar WHERE 1 = 1 numa query?
03/05/2017
0
Numas queries que tive que mexer aqui vi que existia essa condição que ao meu ver não faz NADA. Mas posso estar errado, sei lá rs.
Umas das queries foi a seguinte:
SELECT id_funcionario, nome, status FROM tbl_funcionario WHERE 1 = 1
Sinceramente, não consigo entender o porquê dessa condição. Mas como a vida é uma caixinha de surpresas, gostaria de saber com alguém se essa condição tem algum motivo para ser usada.
Obrigado!
Robson Cavalcante
Post mais votado
03/05/2017
o uso do 1 = 1 na clausula where, se dá pelo fato do programa que faz o select no banco de dados ter filtros para buscar os dados.
E quando esses filtros não são utilizados, o programa insere 1 = 1, pois é uma sentença verdadeira que não compromete a execução da consulta.
Exemplo:
Relatórios de Relação de Clientes;
Filtros --> Código, Nome e CNPJ
Consulta -->
SELECT CODIGO, NOME, CNPJ
FROM CLIENTES
WHERE |CODIGO| AND |NOME| AND |CNPJ|
Caso o usuário só insira o código no filtro para gerar esse relatório, a consulta ficará assim:
SELECT CODIGO, NOME, CNPJ
FROM CLIENTES
WHERE CODIGO = 'DIGITO DO USUARIO AND 1 = 1 AND 1 = 1
Com isso não teriamos, problemas na execução da consulta.
Se o programa não fizer essa substituição, no momento de passar a consulta SQL, o código ficaria assim:
SELECT CODIGO, NOME, CNPJ
FROM CLIENTES
WHERE CODIGO = 'DIGITO DO USUARIO AND |NOME| AND |CNPJ|
E geraria erro de execução, pois não é uma instrução válida.
Essa é uma forma de se utilizar o 1=1.
Espero ter ajudado e desejo boa sorte em sua jornada.
Rafael Oliveira
Mais Posts
03/05/2017
Gabriel Rocha
No entanto, quando as condições do where são geradas dinamicamente, e o programador vai acrescentando-as com AND dentro de ifs, por estas dependerem de outros fatores do programa que gera o SQL, fica clara sua intenção:
Se nao houver condição adicional, a query permanece assim ...
SELECT * FROM Destinatario where 1 = 1
... mas no caso, se for verdadeira a condição logo em seguida do seu exemplo, ela pode ficar:
SELECT * FROM Destinatario where 1 = 1 AND Nome = "Roberto"
Note que se não houvesse o WHERE 1=1, ela ficaria desta forma, e não funcionaria:
SELECT * FROM Destinatario AND Nome = "Roberto"
-- temos um erro aqui --^
Para uma condição AND só, o autor poderia ter posto o WHERE dentro da condição, mas se forem varias condiçoes, o WHERE 1=1 permitiria várias condições separadas, montadas por ifs diferentes:
SELECT * FROM Destinatario where 1 = 1
SELECT * FROM Destinatario where 1 = 1 AND Nome = "Roberto"
SELECT * FROM Destinatario where 1 = 1 AND Cidade = "Santos"
SELECT * FROM Destinatario where 1 = 1 AND Nome = "Roberto" AND Cidade = "Santos"
Assim, o AND Nome poderia estar em um if e o AND Cidade em outro, e todos funcionariam independente de ter que saber se já há um if anterior no código que gera o SQL.
10/05/2017
Robson Cavalcante
Quando eu por exemplo estou construindo minhas queires, faço por meio da programação, verificando como a query está sendo construída. Por isso não tinha visto a necessidade de se usar essa condição que sempre dá true.
Enfim, espero não usar isso. Muito obrigado Rafael e Gabriel!
10/05/2017
Fabio Parreira
12/05/2017
Carlos Arantes
Caramba, pode crer! É só colocar essa condição no login e colocar o comentário do banco de dados que ele vai aceitar. Fiz um teste aqui e aconteceu exatamente isso! Como posso evitar isso?
12/05/2017
Fabio Parreira
12/05/2017
Fabio Parreira
Esse programa é mesmo o capeta, ele vai varrer seu site inteiro, testar vários tipos de ataque, inclusive SQL Injection. Ele é pago mas você encontra versões "pipipithu" por ai. rs(Muito cuidade ao usar esse programa em sites, pois ele faz muitas requisições no server e deixa um grande rastro).
Agora para SQL Injection mesmo tem o Havij, que é bem voltado a invasão de sistemas através de SQL Injection, e vai por mim, você consegue invadir uns 7 sites de 10 em PHP. Teste comprovado por quem vos escreve.
18/05/2017
Robson Cavalcante
Esse programa é mesmo o capeta, ele vai varrer seu site inteiro, testar vários tipos de ataque, inclusive SQL Injection. Ele é pago mas você encontra versões "pipipithu" por ai. rs(Muito cuidade ao usar esse programa em sites, pois ele faz muitas requisições no server e deixa um grande rastro).
Agora para SQL Injection mesmo tem o Havij, que é bem voltado a invasão de sistemas através de SQL Injection, e vai por mim, você consegue invadir uns 7 sites de 10 em PHP. Teste comprovado por quem vos escreve.
Obrigado pela sugestão Parreirafabio. Você trabalha com banco de dados? Parece conhecer bastante sobre a área?
18/05/2017
Fabio Parreira
Clique aqui para fazer login e interagir na Comunidade :)